【发布时间】:2009-09-18 11:12:00
【问题描述】:
我想在派生类中隐藏基础公共属性(数据成员):
class Program
{
static void Main(string[] args)
{
b obj = new b();
obj.item1 = 4;// should show an error but it doent ???
}
}
class a
{
public int item1 {get; set;}
public int item2 { get; set; }
}
class b : a
{
new private int item1;
}
class c : a
{
}
我将成员设为public,因为我希望在c类中继承该成员,但想在b类中隐藏该成员,我该怎么做?
我没有选择在我的基类中选择性地继承我想要的变量吗???那真的很糟糕,我认为 ms 应该为我们提供一个选项(可能是一个修饰符)来执行此操作
编辑:
我自己找到了答案(我听到很多人说这在 c# 中是不可能的,但你可以做到)
我将代码包括在内,以防它有用
class Program
{
static void Main(string[] args)
{
b obj = new b();
obj.item1 = 4; // shows an error : )
}
}
class a
{
public int item1 { get; set; }
public int item2 { get; set; }
}
class b : a
{
new public static int item1
{
get;
private set;
}
}
【问题讨论】:
-
这段代码编译正确吗?
-
作文。也许甚至值得回答。
-
这是个坏主意!它打破了OO继承和多态的整个概念。为什么你曾经想要这样做?
-
对我来说,我这样做是因为我正在创建一个 api。我的 api 对象继承自基类对象,但保护了一些大多数程序员不应该更改的属性和方法。
-
为什么不直接创建一个包含您要在其中扩展的类的类。然后只需通过访问器公开您想要的任何属性?我认为 Dykam 暗示了这一点。当我想简化一个类时,我会这样做——只显示我关心的属性,并在访问器中有代码来转换基类属性的行为。
标签: c#