c#只获取子属性,而不获取父类属性

c#只获取子属性,而不获取父类属性,c#,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; } 我知道反思是可能的,但如果可以避免的

有没有一种不使用反射的方式来获取对象的唯一子属性

例如:

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

我知道反思是可能的,但如果可以避免的话

您可以使用
受保护的
辅助功能修饰符:

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


您可以将PropA标记为private,请参见:

私人的 类型或成员只能由同一类或结构中的代码访问


只是一个简短的提示:大多数时候,我使用反射来做完全相反的事情:访问我不被允许的东西,例如,因为它们是私有的…;-)反射不是隐藏东西的“工具”。它能打开通常锁着的每扇门;-)

你是否可以这样做

class A 
{
   private string PropA; 
}

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

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


您可以为继承的类创建一个特定接口,如say

interface ISpecificB {
    string PropB;
}
然后创建您的类,如

public class A {
    public string PropA;
}

public class B: A, ISpecificB {
    public string PropB;
}
在创建变量或从函数返回变量时,仅使变量具体到
isspecificb

ISpecificB classB = new B();

classB.PropA // shouldn't be available

但是,类B仍然可以被转换为B或A,这将允许访问propA,并且可能会增加解决方案的复杂性

不要从
A
继承
B
。不,不是真的,除非B实现了一个特定的接口,并且您可以像接口一样转换它?像
isSpecificInterface classB=new B()
@Wojciech Szabowicz-请解释您试图实现的目标,以便我们找到合适的解决方案。您的问题的简单答案是否定的,但我们需要更多信息无法隐藏继承的成员,请告诉我们您为什么需要这样做,我们可以尝试提出更适合您的问题的替代解决方案。我有一个简单的穷人映射器,它通过检查属性名称和类型来设置从一个类到另一个类的值,若我映射了一些额外的字段(这里是PropA),一些值会被覆盖。也不会像我在上面的评论中添加的那个样使用特定的接口?我的意思是有一些变通办法,尽管你的观点也完全正确:)@Icepickle-你的演员阵容是正确的,我正在重新思考我的答案,这不是原始问题的一部分…;-)在大多数情况下,使用反射来完成您所做的事情表明设计存在问题……我没有说“我使用反射来设计我的解决方案”。有时候,反射就是答案,比如属性访问,对吗?
public class A {
    public string PropA;
}

public class B: A, ISpecificB {
    public string PropB;
}
ISpecificB classB = new B();

classB.PropA // shouldn't be available