繁体   English   中英

C#仅获取子属性而没有父类属性

[英]c# get only child properties without parent class properties

有没有一种方法,而不是使用反射,才能使对象的唯一子属性得到优雅?

例如:

class A 
{
    public string PropA;
}

class B : A
{
    public string PropB;
}

class C
{
    var classB_instance = new B();
    /* Only class B properties without parent so B.PropB; but no B.PropA;
}

我知道反射是可能的,但是是否可以避免?

您可以为继承的类创建特定的接口,例如说

interface ISpecificB {
    string PropB;
}

然后像这样创建您的课程

public class A {
    public string PropA;
}

public class B: A, ISpecificB {
    public string PropB;
}

并且仅在创建变量或从函数返回变量时使变量与ISpecificB一样具体

ISpecificB classB = new B();

classB.PropA // shouldn't be available

但是,classB仍可以强制转换为B或A,从而可以访问propA,并且可能会增加解决方案的复杂性

您可以使用protected辅助功能修饰符:

类型或成员只能由相同类或结构中的代码或从该类派生的类中的代码访问。

public class A 
{
    protected string PropA { get; set; }
}

public class B : A
{
    public string PropB { get; set; }
}

public class C
{
    var classB_instance = new B();
    //You can't access classB_instance.PropA
}

您可以将PropA标记为私有,请访问https://msdn.microsoft.com/en-us/library/ms173121.aspx

私有类型或成员只能由相同类或结构中的代码访问。

简短说明:大多数时候,我使用反射来做相反的事情:例如,不允许访问我所访问的内容,因为它们是私有的... ;-)反射不是隐藏某些内容的“工具”,据我所知。 它打开通常锁着的每扇门;-)

是否可以这样做?

class A 
{
   private string PropA; 
}

class B : A
{
 public string PropB;
}
class C
{
  var classB_instance = new B();     
}

将A类的变量PropA声明为私有变量(如下面的代码所示):

class A 
{
    private string PropA;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM