c#只获取没有父类属性的子属性

时间:2016-10-12 09:24:48

标签: c#

是否有一种方法,而不是使用反射,优雅获得一个对象的子项特性?

例如:

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

我知道有可能用反射,但如果可以避免这种情况?

5 个答案:

答案 0 :(得分:3)

您可以为继承的类创建一个特定的界面,比如说

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,这可能会增加解决方案的复杂性

答案 1 :(得分:0)

您可以使用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
}

答案 2 :(得分:0)

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

  

私人      只能通过相同类或结构中的代码访问类型或成员。

只是一个简短的说明:大部分时间,我使用反射完全相反:访问我不被允许的东西,例如,因为它们是私有的...... ;-)反射不是“工具”隐藏一些东西,AFAIK。它会打开通常被锁上的每扇门; - )

答案 3 :(得分:0)

你能否这样做?

class A 
{
   private string PropA; 
}

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

答案 4 :(得分:-1)

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

class A 
{
    private string PropA;
}
相关问题