请大虾赐教:如何使子类中不继承父类中的公有方法?

itmouse 2003-04-21 01:56:46
定义了父类CParent及其子类CChild,现在不想在子类中继承父类的公有方法,如何实现?

public class CParent
{
public void FuncX()
{
...
}

public void FuncY()
{
...
}
}

public class CChild:CParent
{
public void CFuncXX(){};
}

public class Client
{
public void FuncClient()
{
CChild c=new CChild();
c.FuncX();
c.CFuncXX();
c.FuncY(); //要实现该行中类实例c不能引用父类的FuncY方法,该如何实现?
}
}
...全文
117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
timmy3310 2003-04-21
  • 打赏
  • 举报
回复
参考:
http://expert.csdn.net/Expert/topic/1155/1155957.xml?temp=.6429102
itmouse 2003-04-21
  • 打赏
  • 举报
回复
谢谢楼上各位。我的原意是在类实例c中不能使用一个方法,也就是说子类不继承父类的某一方法,要这样做时可以在父类中将该方法标记为protected或private;但有一点我没有说清楚,就是说如果有一个类ChildX,也是继承于Parent,但ChildX的实例(例如为cx)可以使用父类的FuncY方法,同时c却不能使用;我认为,如果要产生这种差别,要在Child和ChildX内部做文章,只是不知如何在C#中实现。

另:
与timmy3310(Tim)兄探讨:
public new void FuncY(){}

public override void FuncY(){}
有何不同?
free_free 2003-04-21
  • 打赏
  • 举报
回复
在父类中声明成虚函数
在子类中override
Lostinet 2003-04-21
  • 打赏
  • 举报
回复
如果你是希望该方法已经过期不能再使用,那么那方法应该标记为Obsolete

public class CParent
{
public void FuncX()
{
...
}
[Obsolete("该方法已经不能使用。",true)]
public void FuncY()
{
...
}
}
Lostinet 2003-04-21
  • 打赏
  • 举报
回复
public class CChild:CParent
{
public void CFuncXX(){};
new public void FuncY(){}
}


你在继承的概念上含糊不清。
这样做往往和你预期的行为不符合。

CParent的public void FuncY()应该标记为virtual才完全符合上面所说的。

timmy3310 2003-04-21
  • 打赏
  • 举报
回复
不可以

除非父类方法声明为private,否则都可以引用

不过你这种情况,可以采用new关键字重写父类方法,如:
public class CChild:CParent
{
public void CFuncXX(){};
public new void FuncY()
{ //什么都不作或者抛一个不支持该方法的异常 }
}
xyttdyso 2003-04-21
  • 打赏
  • 举报
回复
override好些
brightheroes 2003-04-21
  • 打赏
  • 举报
回复
首先我觉得控制不控制这个好像没有很大的意义,你不用这个方法不就可以了嘛。然后看看那几个public,private,protected的几个保留字或者他们的组合,可能有所帮助。
zweiii 2003-04-21
  • 打赏
  • 举报
回复
子類中override

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧