没想明白,屏蔽基类的相关属性
我派生了一个新类,增加了新的功能,从而倒致从基类继承来的某些属性是多余或有冲突,必须屏蔽掉,即在派生类中不能再可视了,我想要是私有继承也就解决了,但这样又一棍子打死了所有。个位有没什么好方法?
谢谢!!
问题点数:20、回复次数:5Top
1 楼Knight94(愚翁)回复于 2006-11-01 08:44:34 得分 4
to 我派生了一个新类,增加了新的功能,从而倒致从基类继承来的某些属性是多余或有冲突,必须屏蔽掉,即在派生类中不能再可视了,我想要是私有继承也就解决了,但这样又一棍子打死了所有。个位有没什么好方法?
用new关键字,例如:
public class baseclass
{
public void Test();
}
public class subclass:baseclass
{
public new void Test();
}Top
2 楼JasonHeung(拥有一切不过就这样笑着哭)回复于 2006-11-01 08:53:42 得分 0
原因有二:
基类设计的不合理
你的继承处理不合理
解决办法有三:
重新设计基类
重新设计派生类
基类和派生类都从另外的接口或者基类派生Top
3 楼liujia_0421(SnowLover)回复于 2006-11-01 09:11:42 得分 10
继承下来的东西肯定会存在的,不能够屏蔽, 当然可以使其方法或属性不在vs的智能提示框里出现是可以的 ,举个例子吧:
public class a
{
private int count = 0;
[BrowsableAttribute(true)]
public int Count
{
get
{
return count;
}
set
{
count = value;
}
}
}
public class b: a
{
[BrowsableAttribute(false)]// 重新定义Count属性且不显示
public new int Count
{
get
{
return base.Count;
}
set
{
base.Count = value;
}
}
}
参考一下,试试看吧...
Top
4 楼qltouming(缘木渔人-临渊羡鱼,不若退而结网)回复于 2006-11-01 09:27:48 得分 0
最近也在考虑类似的问题,在这里想和Knight94(愚翁)讨论下,使用New关键字后,调用subclass的时候是看不到baseclassr的Test()方法了,但subclass却有了自己的Test()方法,且可以被看到.是否subclass的Test()方法不应该给予实现呢?Top
5 楼liujia_0421(SnowLover)回复于 2006-11-01 09:28:05 得分 6
如果是屏蔽组件显示的属性以及方法 ,倒可以参考一下这篇文章:
http://bbs.mscommunity.com/Forums/ShowThread.aspx?PostID=17169Top




