2

我有两个类,像这样的基类和继承类

public class A
{
     public string Prop1 { get; set; }
} 

public class B : A
{
     public string Prop2 { get; set; }
} 

A现在我有一个在填充属性值后返回类的方法

public A GetPopulatedValues()
{
     //code to populate values here
}

现在我的问题是,如何一次分配所有属性值?

这有效

public void Init()
{
   var obj = new B();
   obj.Prop1 = GetPopulatedValues().Prop1;
}

但我想要这样的东西

  public void Init()
{
   var obj = new B();
   obj = GetPopulatedValues();
}

有任何想法吗?

4

2 回答 2

5

创建一个构造函数:

public Foo(string prop1, string prop2)
{
    Prop1 = prop1;
    Prop2 = prop2;
}

或复制构造函数:

public Foo(Foo other)
{
    Prop1 = other.Prop1;
    Prop2 = other.Prop2;
}

或者使用对象初始化器:

var foo = new Foo { Prop1 = "Hello", Prop2 = "World" };

但正如@RudiVisser 所说,您实际上希望GetPopulatedValues()通过提供对要填充的对象的引用来解决此问题:

static class FooPopulator
{
    public static void PopulateValues(Foo foo)
    {
        foo.Prop1 = "Hello";
        foo.Prop2 = "World";
    }
}

var foo = new Foo();
FooPopulator.PopulateValues(foo);

现在您的foo对象是可用和可填充的,而无需更改Foo类。额外的好处:当您添加要填充的属性(例如Prop3)时,您只需更改PopulateValues()方法。

在您的代码中,您也必须这样做,但是您还需要添加Prop3分配,如果忘记,将导致错误。

于 2013-03-04T12:19:01.477 回答
3

我同意@CodeCaster 的观点,这可能应该通过修改构造函数来完成,但只是为了提供另一种选择——为什么不让你的GetPopulatedValues方法接受 的实例A,并直接填充值。

public void GetPopulatedValues(A instance)
{
    instance.Prop1 = (whatever);
}

public void Init()
{
    var obj = new B();
    GetPopulatedValues(obj);
}
于 2013-03-04T12:21:11.350 回答