C#中,子类如何调用父类的方法?注意,是父类,不是基类!!

llsus 2014-08-15 12:34:42
举例说明:


class cF
{
public m1()
{}

class cC
{
private m2()
{
// 这里,我要调用 cF.m1(), 怎么实现??
}
}
...全文
1585 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-08-15
  • 打赏
  • 举报
回复
static是个好办法 m1不用是public型,因为cc本来就在cf内部,可以直接访问私有函数
於黾 2014-08-15
  • 打赏
  • 举报
回复
new一个cf,然后调用
bdmh 2014-08-15
  • 打赏
  • 举报
回复
传递或new一个cf实例,或者用static方法
kissapple500 2014-08-15
  • 打赏
  • 举报
回复
传递或new一个cf实例,或者用static方法
於黾 2014-08-15
  • 打赏
  • 举报
回复
当然,除非你在调用这个父类方法的时候,不传递任何参数,而是使用父类中的全局变量,那就跟你到底传入哪个实例有关了.
於黾 2014-08-15
  • 打赏
  • 举报
回复
就是说,一个方法,不管是谁来调用它,是父类也好,是子类也好,是接口也好,只要是调用同一个方法,执行的逻辑是完全没有区别的 至于方法重载,重写,那是执行了另一个方法,跟这个方法本身没有任何关系.
於黾 2014-08-15
  • 打赏
  • 举报
回复
引用 10 楼 moonwrite 的回复:
区别是这个更加解耦 private m2(ICF cf)//ICF是接口 //那么可以传指定实现者进来,方便替换 { cf.fun(); } 请看 策略模式 http://blog.csdn.net/ghsau/article/details/8178336
但是方法本身,不管是静态的,还是实例的,代码是没有区别的,你管它传入的是谁,有任何区别? 区别只在于传递进去的参数
phommy 2014-08-15
  • 打赏
  • 举报
回复
因为你的“父”类中的方法是非静态的,几乎无法实现,因为m2方法执行时可能有n个父类实例,无法区分要用哪个this 如果是m1改为静态的倒是简单,this.GetType().ReflectedType.GetMethod("m1").Invoke
moonwrite 2014-08-15
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
[quote=引用 5 楼 moonwrite 的回复:] 需要别人的能力~除了继承就是组合 private m2(CF cf) { cf.fun(); }
这样需要在调用m2之前,传入实例化好的cf类对象,跟在cc里实例化有什么区别么...[/quote] 区别是这个更加解耦 private m2(ICF cf)//ICF是接口 //那么可以传指定实现者进来,方便替换 { cf.fun(); } 请看 策略模式 http://blog.csdn.net/ghsau/article/details/8178336
我叫小菜菜 2014-08-15
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
static是个好办法 m1不用是public型,因为cc本来就在cf内部,可以直接访问私有函数
1.使用static声明为类方法 2.使用继承
class cF {          
public m1(){}   
}            
class cC :cF {         
 private m2()           
{  
    m1();//调用的是cF(父类)的方法        
}     
} 
於黾 2014-08-15
  • 打赏
  • 举报
回复
引用 5 楼 moonwrite 的回复:
需要别人的能力~除了继承就是组合 private m2(CF cf) { cf.fun(); }
这样需要在调用m2之前,传入实例化好的cf类对象,跟在cc里实例化有什么区别么...
Saleayas 2014-08-15
  • 打赏
  • 举报
回复
类 和 实例 是不一样的。 cF 没有 m1 的方法, cF 的实例才有这个方法。 如果 要呼叫 属于类 cF 的 方法,那么这个方法只能是类方法,而不是实例方法。也就是说这个方法必须是 static 的。
Tiger_Zhao 2014-08-15
  • 打赏
  • 举报
回复
在子类的构造函数中传入父类对象(程序版的“I'm your father”
举个例子
///System.Windows.Forms.TreeNode
internal TreeNode(TreeView treeView) : this()
{
this.treeView = treeView;
}

///System.Windows.Forms.TreeView
public TreeView()
{
this.hNodeMouseDown = IntPtr.Zero;
this.indent = -1;
this.itemHeight = -1;
this.pathSeparator = backSlash;
this.borderStyle = BorderStyle.Fixed3D;
this.nodeTable = new Hashtable();
this.treeViewState = new BitVector32(0x75);
this.root = new TreeNode(this); // <--
this.SelectedImageIndexer.Index = 0;
this.ImageIndexer.Index = 0;
base.SetStyle(ControlStyles.UserPaint, false);
base.SetStyle(ControlStyles.StandardClick, false);
base.SetStyle(ControlStyles.UseTextForAccessibility, false);
}
moonwrite 2014-08-15
  • 打赏
  • 举报
回复
需要别人的能力~除了继承就是组合 private m2(CF cf) { cf.fun(); }
漫天雪飞 2014-08-15
  • 打赏
  • 举报
回复

110,536

社区成员

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

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

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