Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以对派生类隐藏属性?_C# - Fatal编程技术网

C# 是否可以对派生类隐藏属性?

C# 是否可以对派生类隐藏属性?,c#,C#,类A派生自类B。在类A中,我想隐藏从类B继承的一些属性。因此,当创建类A的实例时,我不想公开类B中的一些属性 这可能吗?不,这会破坏继承的目的。您的类A是B,因此它具有B的属性。是否可以对要隐藏的属性使用私有访问说明符 如果没有,请通过此链接-可能会对您有所帮助- 您可以通过声明具有相同名称(和新修饰符)的新成员来对成员进行阴影处理。但这并没有隐藏任何东西,也不会阻止任何人回退到B并以这种方式访问成员 您确定要在这种情况下使用继承吗?当你从B导出A时,你可能想仔细阅读A,你是说A实际上与B相同,

类A派生自类B。在类A中,我想隐藏从类B继承的一些属性。因此,当创建类A的实例时,我不想公开类B中的一些属性


这可能吗?

不,这会破坏继承的目的。您的类A是
B
,因此它具有
B

的属性。是否可以对要隐藏的属性使用私有访问说明符

如果没有,请通过此链接-可能会对您有所帮助-

您可以通过声明具有相同名称(和新修饰符)的新成员来对成员进行阴影处理。但这并没有隐藏任何东西,也不会阻止任何人回退到B并以这种方式访问成员


您确定要在这种情况下使用继承吗?当你从
B
导出
A
时,你可能想仔细阅读
A
,你是说
A
实际上与
B
相同,但它有额外的特征;它是
B
的专门化


举个例子:狗是一种动物。在你的例子中,你试着说一只
动物
有鳍,而一只
没有;这绝对不是继承的目的。

为了实现这一点,避免继承并应用组合(即使用接口)。

您的意思是:

class A {
    public virtual int X {
        get { return 1; }
    }
}

class B : A {
    public sealed override int X {
        get { return 2; }
    }
}

class C : B {
    public override int X {
        get { return -1; }
    }
}

如果是,是的。(上面提供了
C
中的编译时错误)。这里的意思是,
A
有一个属性,
B
实现了它,并希望阻止任何子类这样做。

将其设置为
私有
,而不是
公共
受保护