我想将student1的“person”属性设置为person1。这可以通过分配或任何方式逐个设置属性来实现吗?
static void Main(string[] args)
{
var student1 = new Student {Id = 1, Name = "kaya", Class = "3b", Number = "156"};
var person1 = new Person { Id = 2, Name = "hasan" };
}
public class Person
{
public int Id { get; set; }
public String Name { get; set; }
}
public class Student : Person
{
public int Number { get; set; }
public String Class { get; set; }
}
答案 0 :(得分:4)
嗯,你可以用反射来做 - 但我个人不会。您可以在CopyTo
中添加Person
方法:
public class Person
{
public int Id { get; set; }
public String Name { get; set; }
public void CopyTo(Person other)
{
other.Id = Id;
other.Name = Name;
}
}
另一种选择是使用合成而不是继承,这样Student
具有Person
属性,而不是从Person
派生。这实际上取决于更大的图景 - 你真的希望Student
成为一个专门的Person
,还是只是一种简单的方法来获取数据?
这种问题经常出现,但我很少发现自己想在我自己的代码中做到这一点......我有兴趣看到需要这个代码的设计,弄清楚我是怎么做的d设计了它。我不清楚这是不是我不做那种鼓励这种模式的工作,或者我是否使用其他设计来解决同样的问题。
答案 1 :(得分:0)
你看过AutoMapper吗?如果你使用了一半不太合适的约定,你最终会写出几乎为零的代码 -
http://automapper.codeplex.com/
我最近使用AutoMapper将我的POCO映射到Subsonic。