C#中方法重载 | 您所在的位置:网站首页 › 获取字符串的个数的方法有哪些 › C#中方法重载 |
在方法的使用过程中,重载,重写和隐藏是常用到的。下面着重介绍方法的这些使用。 1、重载 重载是方法名不变,参数列表(参数类型或个数)不同的方法体现。 注意:返回值可以相同也可以不同。当参数个数相同而参数类型不同的时候,可以考虑使用泛型,提高代码的复用性。 下面给出示例: public class Func { // 1、显示给出默认的构造函数,这点与结构体不同,结构体的默认构造不能写,一直存在。 public Func() { } // 2、带一个 int 类型参数的自定义构造 public Func(int a) { } // 3、 与 2 不同,带一个 string 类型参数的自定义构造方法 public Func(string a) { } // 4、与 2,3都不同,有两个参数 public Func(int a,int b) { } // 注意下面这种情况,光是返回值不同不是方法重载,编译器也会报错,所以一定要参数列表不同 public int GetNum() { return 0; } public void GetNum(int a) { } } 2、 重写重写用于子类重写父类的方法(虚方法或是抽象方法),当使用子类的实例对象赋值给父类引用的时候,调用方法会调用子类重写之后的方法。 注意:重写必须遵守的规则 (1)、使用 Override 修饰,放在 类型声明的前面,只能重写虚方法(virtual)或抽象方法(abstract); (2)、重写的方法除了方法体可以不同外,方法名,返回值,参数列表必须相同。 下面给出示例: public class BaseClass { public virtual int GetNum() { return 0; } } public class class1:BaseClass { // 父类的方法是虚方法时(virtual),子类可以不用重写父类的方法,重写需注意: // 1、返回值必须相同 2、方法名必须相同 3、参数列表必须相同 public override int GetNum() { return 1; } } public abstract class AbstractClass { // 抽象方法只能有声明,不能有实现(花括号{}) public abstract int GetNum(); } public class class2:AbstractClass { // 父类是抽象类,则子类必须重写父类的抽象方法,重写的规则同上 public override int GetNum() { return 0; } } // 调用重写方法 // 子类实例化的对象赋值给父类的引用 BaseClass myClass = new class1(); // 调用方法时,会调用子类重写后的方法 int a = myClass.GetNum(); // a = 1 // 抽象类不能实例化,可以用子类实例化的对象赋值给该类的引用 AbstractClass myClass1 = new class2(); int b = myClass1.GetNum(); // b = 03、隐藏 隐藏也是应用于父类和子类,当父类的方法不是虚方法或抽象方法时,子类可以隐藏父类的方法,丰富面向对象的多态性。注意: (1)、隐藏方法使用 new 关键字,在类型前面声明; (2)、方法名和参数列表必须相同,返回值和方法体可以不同; (3)、父类引用指向子类的实例对象时,调用方法会调用父类的方法,而不是子类的方法。 public class NewClass { public int GetMyNum() { return 0; } } public class class3:NewClass { // 子类隐藏父类的方法时,使用 new 声明,返回值可以与父类方法不同,参数列表必须相同 public new string GetMyNum() { return "子类"; } } NewClass cc = new class3(); // 当我不关心或不清楚返回值的类型时,可以使用 var 声明类型,不过必须要初始化,否则编译器推断不出类型 var c = cc.GetMyNum(); // c = 0 |
CopyRight 2018-2019 实验室设备网 版权所有 |