将属性从父 class 提取到其子 class

Extracting properties from parent class to its sub class

我有以下 类:

    public class ParentClass
    {
        public string Name {get;set;}
        public int Age {get;set;}
    }

    public class SubClass : ParentClass
    {
        public int Id {get;set;}

    }

我有以下方法:

    public void InsertSubClass(ParentClass parentClass)
    {
        SubClass subClass = new SubClass();
        subClass.Id = 1;
        subClass.Age = parentClass.Age;
        subClass.Name= parentClass.Name;


    }

如何重构这个方法,不需要将参数ParentClass的属性一一赋值给SubClass的属性? 有没有更有效的选择?或者这真的是怎么做到的?我只是在想,如果属性很多,这可能会很乏味..

提前致谢。 :)

您不能像这样 child.base = parent 将 parent class 分配给 child 的基数 object。您也不能像 var o = (child)parent; o.id=1; 那样将 paret class 转换为 child 您所能做的就是将构造函数添加到接收 parent [=] child class 17=] 并在该构造函数中工作。

你可以通过创建复制构造函数来实现这一点。无论如何,您必须在某处分配父级 class 属性,因为在这种情况下无法进行转换。

这是在父构造函数中分配父 属性 的复制构造函数方法。

public class ParentClass
{
    public string Name { get; set; }
    public int Age { get; set; }

    public ParentClass()
    {

    }

    //Copy constructor
    public ParentClass(ParentClass parentClass)
    {
        this.Name = parentClass.Name;
        this.Age = parentClass.Age;
    }
}

public class SubClass : ParentClass
{
    public int Id { get; set; }

    public SubClass(ParentClass parentClass, int id) : base(parentClass)
    {
        this.Id = id;
    }
}

现在方法看起来像这样。

public static void InsertSubClass(ParentClass parentClass)
{
    SubClass subClass = new SubClass(parentClass, 1);
}

更新

如果您不能对您的父项和子项进行更改 class 那么如何在静态 class 中为父项 class 创建一个扩展方法,如下所示。

public static void ShallowConvert<T, U>(this T parent, U child)
{
    foreach (PropertyInfo property in parent.GetType().GetProperties())
    {
        if (property.CanWrite)
        {
            property.SetValue(child, property.GetValue(parent, null), null);
        }
    }
}

注意:这可能不适用于私有属性和字段。