为基类属性分配值

时间:2014-11-03 04:56:50

标签: c# inheritance

我有一个基类和派生类。

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

我们可以只为该属性分配一个基类。它不是我需要的方式。我需要更平坦的对象

3 个答案:

答案 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设置值。它可以从子类访问。