从继承的类更改基础对象属性的最佳实践是什么?

时间:2010-01-17 09:57:04

标签: c# .net

我想将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; }
    }

2 个答案:

答案 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。