在每个子类中使用基于类的一些属性

时间:2016-04-21 06:49:53

标签: c# oop

有什么方法可以让我给孩子们一些属性吗?

我有一个场景,其中所有子类包含基础但不是所有属性的属性。

假设我拥有所有类的属性

public string AAAAA    { get; set; }
public string ABbbb    { get; set; }
public string ACCCCC   { get; set; }
public string ADDDDDD  { get; set; }
public string AEEEEE   { get; set; }
public string BBBBBB   { get; set; }
public string BBBAAA   { get; set; }
public string CCCCAAA  { get; set; }
public string DDDAAAA  { get; set; }

在A级我只想要

  

AAAAA

     

BBBAAA

属性,在B类中我想要每个属性,在C类中只需要

  

ACCCCC

     

BBBAAA

等等..我有什么方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:3)

我认为您想达到的目标是这样的:

public interface ITypeAny
{
    string MyCommonProperty { get; set; }
}

public interface ITypeA : ITypeAny
{
    string AAA { get; set; }
}

public interface ITypeB : ITypeAny
{
    string BBB { get; set; }
}

public abstract class TypeAny : ITypeAny
{
    public string MyCommonProperty { get; set; }
}

public class TypeA : TypeAny, ITypeA
{
    public string AAA { get; set; }
}

public class TypeB : TypeAny, ITypeB
{
    public string BBB { get; set; }
}

通过这种方式,您可以为所有子类创建公共属性(您将其视为ITypeAny)并且同时具有某些子类的特定属性(在这种情况下,您必须将它们视为{ {1}}或ITypeA)。

答案 1 :(得分:0)

其他答案很棒,因为他们试图帮助你,无视缺乏具体的例子。 这个答案试图直截了当。你的问题:

  

有什么方法可以让我给孩子们一些属性吗?

     

我有一个场景,其中所有子类包含基础但不是所有属性的属性。

,无法使子类仅从基类继承某些属性。

你应该重新考虑你的设计,并可能回到一个更具体,具体的问题。 (另外,也许你有一个XY-problem?)

答案 2 :(得分:-2)

您可以使用私有,公共等修饰符来从子类访问成员。一旦基类具有包含public,internal或protected修饰符的成员,就无法将它们隐藏在兄弟类中。所有兄弟姐妹都有能力访问这些成员。在您的情况下,您必须将公共成员放在基类中,并将所有其他成员放入他们自己的类中。

由于您无法在C#中使用多重继承,因此您可以使用组合或将实体特定成员放入其自己的类中,如上所述。