当前位置:  开发笔记 > 编程语言 > 正文

C#继承概念建议

如何解决《C#继承概念建议》经验,为你挑选了1个好方法。

我在C#中有一个与OOP概念相关的小查询.

我有一个界面

interface intf
{
   string Hello();
}

基类

public class BaseClass
{
   public string Hello()
   {
      return "Hello of base class called";
   }
}

从类中派生BaseClass并实现接口intf的子类

public class ChildClass : BaseClass, intf
{
  string  Hello()
  {
     return "Hello of child class called";
  }
}

现在我的问题是当我ChildClass在调用hello方法时创建一个对象时,它总是调用hello方法BaseClass.首先,为什么它叫HelloBaseClass?其次,我怎么能叫HelloChildClass

private void Form1_Load(object sender, EventArgs e)
{
      ChildClass obj = new ChildClass();
      MessageBox.Show(obj.Hello());
}

Anthony Pegr.. 6

首先,您没有为Helloin 提供访问修饰符ChildClass.这使其默认为私有.要从类外部访问该方法,请标记它public(或者internal如果从同一名称空间使用它).就目前而言,唯一公开可见的Hello方法基类方法.

其次,一旦解决了访问问题,Hello就会将方法隐藏在基础中.如果这是故意的,建议new在方法中使用关键字

public new string Hello()

如果您的意图不是隐藏方法而是覆盖它,则在基类中将方法标记为虚拟,并在子级中使用override关键字.

public class ChildClass : BaseClass, intf
{
    public override string Hello()
    {
        return "Hello of child class called";
    }
}

public class BaseClass
{
    public virtual string Hello()
    {
        return "Hello of base class called";
    }
}

这将允许您始终调用子方法,除非您从子内显式调用基本方法.

来自外界的这样的呼唤

((BaseClass)child).Hello();
(child as BaseClass).Hello();
BaseClass baseClass = new ChildClass();
baseClass.Hello();

将导致使用子方法.

调用像这样从子类

base.Hello();

将导致使用基类方法.



1> Anthony Pegr..:

首先,您没有为Helloin 提供访问修饰符ChildClass.这使其默认为私有.要从类外部访问该方法,请标记它public(或者internal如果从同一名称空间使用它).就目前而言,唯一公开可见的Hello方法基类方法.

其次,一旦解决了访问问题,Hello就会将方法隐藏在基础中.如果这是故意的,建议new在方法中使用关键字

public new string Hello()

如果您的意图不是隐藏方法而是覆盖它,则在基类中将方法标记为虚拟,并在子级中使用override关键字.

public class ChildClass : BaseClass, intf
{
    public override string Hello()
    {
        return "Hello of child class called";
    }
}

public class BaseClass
{
    public virtual string Hello()
    {
        return "Hello of base class called";
    }
}

这将允许您始终调用子方法,除非您从子内显式调用基本方法.

来自外界的这样的呼唤

((BaseClass)child).Hello();
(child as BaseClass).Hello();
BaseClass baseClass = new ChildClass();
baseClass.Hello();

将导致使用子方法.

调用像这样从子类

base.Hello();

将导致使用基类方法.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有