从Method分配属性

时间:2013-03-04 12:17:24

标签: c#

我有两个类,基类和继承类,如这些

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();
}

有什么想法吗?

2 个答案:

答案 0 :(得分: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分配,如果忘记这将导致错误。

答案 1 :(得分:3)

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

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

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