c# 多态 虚方法
多态:
为了解决同一种指令,可以有不同行为和结果
在运行时,可以通过调用同一个方法,来实现派生类中不同表现。
虚方法——抽象类——抽象函数——接口
虚方法:
被virtual 关键字修饰的方法 叫做 虚方法
虚方法通常写在你要继承的父类中, 用virtual 关键字去修饰子类要重写的方法
让我不同的子类对象,对统一指令有不同的行为
1.虚方法在调用,会攻击你运行时,实际的对象和最后重写的方法,去决定运行哪一个
2.如果你是非虚方法,是需要转成对应的对象,才能执行对应的方法
3.子类只能重写同参数列表同返回类型同名的虚方法
4.不要在子类中去声明一个和虚方法同名的新方法,虚方法会被new给隐藏掉
sealed:
1.可以密封一个虚方法的重写,导致新的派生类无法重写
2.密封一个类 ,使这个类无法被派生
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 飞行棋 { public class A { public virtual void Fun1(int i) { Console.WriteLine(i); } public void Fun2(A a) { a.Fun1(1); Fun1(5); } } class Program:A { public override void Fun1(int i) { base.Fun1(i+1); } static void Main(string[] args) { Program b = new Program(); A a = new A(); a.Fun2(b); //2 5 b.Fun2(a); //1 6 Console.ReadLine(); } } public abstract class A { public A() { Console.WriteLine('A'); } public virtual void Fun() { Console.WriteLine("A.Fun()"); } } class Program :A { public Program() { Console.WriteLine('B'); } public new void Fun() { Console.WriteLine("B.Fun()"); } static void Main(string[] args) { A a = new Program(); a.Fun(); // A B A.Fun() Console.ReadLine(); } } class BaseClass { public virtual int Add(int x,int y) { return x+y; } } class Program:BaseClass { static int z = 100; public override int Add(int x, int y) { return base.Add(x,y)+z; //300 // return x * y; 50 } static void Main(string[] args) { BaseClass baseclass = new Program(); Console.WriteLine(baseclass.Add(10,5)); Console.ReadLine(); } } }