我有以下代码:C#子类中的受保护属性应该隐藏对父级公共属性的访问权吗?
public class Parent
{
public string MyField { get; set; }
}
public class Child : Parent
{
protected new int MyField { get; set; }
}
我试着和访问此:
static void Main(string[] args)
{
Child child = new Child();
child.MyField = "something";
}
Visual Studio 2008的编译此不加评论,但在Mono下(2.4.2,Ubuntu的),我得到的错误消息
'HideTest.Child.MyField' is inaccessible due to its protection level (CS0122)
是一个实现还是其他更符合标准?
编辑:感谢所有指出了坏设计的人。不幸的是,它是一个第三方库,并且对其进行显着改变并不实际。
这实际上是否与继承有关? Ubuntu可以使用Child类中的任何受保护字段吗? – 2010-05-16 20:15:30
在回答之前,你能否向我解释一下,如何在Parent类中公开一个属性,并在Child类中保护属性?我认为你有严重的设计问题。 – 2010-05-16 20:20:03
使用'新'是一个要避免的混乱,特别是当你有两个类的源代码的控制。而你正在试图做的事情,即覆盖一个不同类型的遗产,味道真的很差。腐烂的鱼臭,甚至。 ;-)你应该再看看你正在努力完成什么,并找到一个干净的方式来做到这一点。在生命早期形成像这样的不良习惯将导致牛皮癣和焦虑症的发作。 – 2010-05-16 21:00:26