对继承有研究的进

xuexplorer 2005-06-30 03:42:06
class A
{
....
protected void F(string s)
{
.....
}
.....
}

class B:A
{
.....
protected override void F(string s)
{
.....
base.F(s);
.....
}
.....
}

class C:B
{
......
protected override void F(string s)
{
.....
base.F(s);//默认这里调用的是B.F(),如何调用A.F()???
.....
}
......
}
...全文
150 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexplorer 2005-07-03
  • 打赏
  • 举报
回复
最终结果不可实现
renyu732 2005-07-01
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/classinherit.asp#classinherit_topic1
xuexplorer 2005-07-01
  • 打赏
  • 举报
回复
protected->public 不行,因为这已经是别人做好的dll了

办法是有的,但也许和你想象的不一样,先创建一个祖先对象,再调用其方法不就可以了。
A a=new A();
a.F(s);
显然不行,因为F是protected的

cdjjh 2005-07-01
  • 打赏
  • 举报
回复
办法是有的,但也许和你想象的不一样,先创建一个祖先对象,再调用其方法不就可以了。
class C:B
{
......
protected override void F(string s)
{
.....
A a=new A();
a.F(s);
.....
}
......
}
Seeko0 2005-07-01
  • 打赏
  • 举报
回复
protected限定下,C中不能通过实例A来访问A中受保护的方法

全部改成protected->public方法可取,这样的话才可以在D中实例A,并获取A中的public 方法
xuexplorer 2005-06-30
  • 打赏
  • 举报
回复
不行啊
melody2004 2005-06-30
  • 打赏
  • 举报
回复
另外继承的时候,我认为应该加上“public”继承
class A
{
....
protected void F(string s)
{
.....
}
.....
}

class B:public A
{
.....
protected override void F(string s)
{
.....
base.F(s);
.....
}
.....
}

class C:public B
{
......
protected override void F(string s)
{
.....
base.A::F(s); .....
}
......
}

因为私有继承的话,A的F(S)对C而言是不可访问的。
melody2004 2005-06-30
  • 打赏
  • 举报
回复
用成员名限定访问试试看
base.A::F(S)
xu770 2005-06-30
  • 打赏
  • 举报
回复
mark
Seeko0 2005-06-30
  • 打赏
  • 举报
回复
推荐学习ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/csspec/html/vclrfcsharpspec_10_6_3.htm
hackate 2005-06-30
  • 打赏
  • 举报
回复
汗在这点上,C#和VB。NET就差很多了。
我在VB。NET里也没找到什么方法耶!
关注这个问题。。。不知道是否可能实现。。。觉得似乎不太可能哦。。
xuexplorer 2005-06-30
  • 打赏
  • 举报
回复
ruihuahan(飞不起来的笨鸟) 说的对
应该是这样

class A
{

protected virtual void F(string s)
{
}
}

class B:A
{
protected override void F(string s)
{
base.F(s);
}
}

class C:B
{
protected override void F(string s)
{
base.F(s);

}

}
class D:C
{
protected override void F(string s)
{
base.F(s);//默认这里调用的是C.F(),如何调用B.F()???
}

}


base.base.F()显然不行
ruihuahan 2005-06-30
  • 打赏
  • 举报
回复
a syntax error:

The overrided method in the base class must be a virtual method。

class A
{
....
protected virtual void F(string s)
{
.....

copine 2005-06-30
  • 打赏
  • 举报
回复
试试base.base.f(s);
真相重于对错 2005-06-30
  • 打赏
  • 举报
回复
我的答案是错的
真相重于对错 2005-06-30
  • 打赏
  • 举报
回复
class C{
.....
public test()
{
A a1 = this as A;
a1.F();
}

hackate 2005-06-30
  • 打赏
  • 举报
回复
那这样你还不如直接继承C??
listhome 2005-06-30
  • 打赏
  • 举报
回复
ClassC c=new Class A();
c.F();
试试
renyu732 2005-06-30
  • 打赏
  • 举报
回复
近段了解一些委托事件的工作原理.找到两个很不错的例子,所以特拿出与大家分享!

http://blog.csdn.net/hackate/archive/2005/06/16/395961.aspx

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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