我有一个基类和派生类。
public class BaseClass
{
public string property1{ get; set; }
public string property2 { get; set; }
public string property3{ get; set; }
}
我派了上课。
public class DerivedClass:BaseClass
{
public string property5 { get; set; }
}
通过
创建派生类对象后DerivedClass d1=new DerivedClass();
我可以通过d1.property1访问基类的属性。我想为所有基类属性赋值一次,而不是为每个属性设置每个属性。有没有办法执行此操作。
如果派生类具有基类属性为
public BaseClss baseClass { get; set; }
我们可以只为该属性分配一个基类。它不是我需要的方式。我需要更平坦的对象
答案 0 :(得分:1)
为什么不使用构造函数的概念?或者一个受保护的方法,它可以在派生类的任何方法调用时完成所需的操作?
据我所知,你的继承不公开?私人继承的具体原因是什么?在私人继承的情况下,我认为你应该采取公共方法。 (根据C ++说。如果C#标准不同,可能需要进行修正)
答案 1 :(得分:1)
您的问题并非100%明确,因此我会向您提供一些尝试涵盖多个基础的信息。
如果要在初始化期间设置多个属性,可以这样做:
var d1 = new DerivedClass()
{
prop1 = "value",
prop2 = "value",
prop3 = "value"
};
以类似的方式,您可以实现非默认构造函数:
public class BaseClass
{
public string prop1 { get; set; }
public string prop2 { get; set; }
public string prop3 { get; set; }
public BaseClass(string p1, string p2, string p3)
{
prop1 = p1,
prop2 = p2,
prop3 = p3
}
}
...并像这样使用它:
var d1 = new DerivedClass("val1", "val2", "val3");
...或者像这样(使用命名参数):
var d1 = new DerivedClass(prop1: "val1", prop2: "val2", prop3: "val3");
您还可以考虑在默认构造函数中初始化属性:
public class BaseClass
{
public string prop1 { get; set; }
public string prop2 { get; set; }
public string prop3 { get; set; }
public BaseClass()
{
prop1 = "value",
prop2 = "value",
prop3 = "value"
}
}
我甚至会在那些构造函数中使用可选参数,它涵盖了初始值,但它取决于你的设计:
public class BaseClass
{
public string prop1 { get; set; }
public string prop2 { get; set; }
public string prop3 { get; set; }
public BaseClass(string p1 = "val1", string p2 = "val2", string p3 = "val3")
{
prop1 = p1,
prop2 = p2,
prop3 = p3
}
}
你可以像这样使用它:
// prop1 equals to "someVal1", prop2 equals to "someVal2" and prop3 equals to "someVal3"
var d1 = new DerivedClass("someVal1", "someVal2", "someVal3");
...或者像这样:
// prop1 equals to "val1", prop2 equals to "val2" and prop3 equals to "val3"
var d1 = new DerivedClass();
如果您正在谈论全面更改属性(即多个实例共享相同的属性实例),则需要使用static
关键字实现属性。
public class BaseClass
{
public static string prop1 { get; set; } // this property gets shared among all instances
public string prop2 { get; set; }
public string prop3 { get; set; }
}
请注意,您将无法从实例设置静态属性。你可以设置它并像这样访问它:
BaseClass.prop1 = "someValue";
Console.WriteLine(BaseClass.prop1); // prints "someValue"
Console.WriteLine(DerivedClass.prop1); // prints "someValue"
DerivedClass.prop1 = "otherValue";
Console.WriteLine(DerivedClass.prop1); // prints "otherValue"
Console.WriteLine(BaseClass.prop1); // prints "otherValue"
还有更多方法,但我认为现在我的大脑倾销已经足够了......至少在你澄清你的意图之前。
答案 2 :(得分:1)
尚不清楚。我认为你只需要在基类设置属性。
public class BaseClass
{
private string _property = "value";
public string property1
{
get
{
return _property;
}
protected set
{
_property = value;
}
}
public string property2 { get; set; }
public string property3 { get; set; }
}
这里我们不能从child或其他任何东西为property1设置值。它可以从子类访问。