使用几乎相同的类数据填充类

Jam*_*off 4 c# asp.net class

我有两个类,除了一个类需要另一个属性之外,它们应该完全相同。

我没有将所有属性重写两次,而是想从 BaseClass 继承所有属性,而只在 MyNewClass 中添加一个额外属性

 public class BaseClass
    {
        public int BaseProperty1 { get; set; }
        public int BaseProperty2 { get; set; }
        public int BaseProperty3 { get; set; }
    }

    public class MyNewClass: BaseClass
    {
        public int? ExtraProperty{ get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

因为我已经在我的函数中填写了原始 BaseClass 的所有细节,所以能够使用这个类的实例来填写 MyNewClass 的新实例的细节会容易得多。

我希望它会像以下一样简单,但不幸的是我收到错误:System.InvalidCastException:'无法将'BaseClass'类型的对象转换为'MyNewClass'。'

 MyNewClass myNewClass= new MyNewClass();
 myNewClass = (MyNewClass)baseClass; //baseClass is alread populated at this point
 myNewClass.ExtraProperty = 1;
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用另一个少一个属性的类来快速填充一个类?

我可以单独设置每个属性,但我使用的类非常大,感觉很糟糕。

在此先感谢您的帮助。

Fab*_*jan 5

并非每个Fruit都是apple,因此从编译器的角度来看,并不是 everyBaseClass都是一个实例,MyNewClass因此转换失败。

您可以做几件事。例如使用构造函数来填充值:

public class MyNewClass : BaseClass
{
    public int? ExtraProperty { get; set; }

    public MyNewClass(BaseClass baseClass)
    {
        BaseProperty1 = baseClass.BaseProperty1;
        BaseProperty2 = baseClass.BaseProperty2;
        BaseProperty3 = baseClass.BaseProperty3;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

 var myNewClass = new MyNewClass(baseClass);
 myNewClass.ExtraProperty = 1;
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个,但我不是发布它的人。 (2认同)