我有两个类,基类和继承类,如这些
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();
}
有什么想法吗?
答案 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);
}