怎么声明不可继承的方法

lmqslyh 2007-12-07 01:01:30
怎么声明一个方法 子类不能继承 但是外部可以访问
还有不能事static方法
...全文
146 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
superyys 2008-09-16
  • 打赏
  • 举报
回复
申明成private,,外部调用的全局函数或者类用friend修饰.
我一般这样解决
yangdu328 2008-09-13
  • 打赏
  • 举报
回复
加final修饰类或方法
lmqslyh 2007-12-07
  • 打赏
  • 举报
回复
受教了 谢谢楼上的dh 呵呵
DemonXHunter 2007-12-07
  • 打赏
  • 举报
回复
一定是可以重写或者覆盖的,除非是私有函数,但是私有函数无法被外部调用,显然是无法达到的。
所以你这个要求无法达到。一般来说,不加virtual就可以了,很少有人用new来屏蔽父类的函数,除非那个人知道这么做的后果。并且,屏蔽父类的函数并不会导致父类的行为异常,所以一般也不会出什么乱子。
lmqslyh 2007-12-07
  • 打赏
  • 举报
回复
恩 明白了
多谢 我的提问错了...

应该是 子类可以继承 但是不能重写或者覆盖父类的
因为父类的方法已经满足需求了

这样的方法在父类怎么声明?
DemonXHunter 2007-12-07
  • 打赏
  • 举报
回复
给你看段代码就知道了,你需要学习一下基本的OOP编程的知识。对于一个子类对象,如果是重写虚函数,不管你是通过子类还是基类的形式去调,调的都是被重写的子类方法。而对于一个覆盖(Shadow)的函数,如果是通过父类调用的话,那么调用的就是父类函数,通过子类形式调,就是子类方法。

class A
{
public virtual void f1()
{
Console.WriteLine("A.f1 is called!");
}

public void f2()
{
Console.WriteLine("A.f2 is called!");
}

}
class B:A
{
public override void f1()
{
Console.WriteLine("B.f1 is called!");
}

public new void f2()
{
Console.WriteLine("B.f2 is called!");
}
}


class Program
{
static void Main(string[] args)
{
A a = new B();

a.f1();
a.f2();

Console.ReadKey();
}
}

==========输出结果

B.f1 is called!
A.f2 is called!
lmqslyh 2007-12-07
  • 打赏
  • 举报
回复
重写跟覆给调用时有什么区别?
DemonXHunter 2007-12-07
  • 打赏
  • 举报
回复
你不加virtual,子类就无法重写,只能覆盖。
北京的雾霾天 2007-12-07
  • 打赏
  • 举报
回复
“管理帖子”就可以了
lmqslyh 2007-12-07
  • 打赏
  • 举报
回复
各位大哥,怎么给别人分?
lmqslyh 2007-12-07
  • 打赏
  • 举报
回复
我想的是 防止子类重写这方法引发问题
而且父类这个方法功能比较简单 不需要子类重写
DemonXHunter 2007-12-07
  • 打赏
  • 举报
回复
没有这样的修饰符。 你这需求比较奇怪,讲讲你的想法,想要达到什么目的
vwxyzh 2007-12-07
  • 打赏
  • 举报
回复
把这个方法声明在一个sealed的类里面,没有子类,就没有任何子类能继承了,呵呵
lmqslyh 2007-12-07
  • 打赏
  • 举报
回复
哦 知道了
谢谢 怎么给分?
北京的雾霾天 2007-12-07
  • 打赏
  • 举报
回复
不可能。

110,500

社区成员

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

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

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