c# 多态 虚方法

时间:2023-03-09 13:41:11
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();
Fun1();
}
}
class Program:A
{
public override void Fun1(int i)
{
base.Fun1(i+);
}
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 = ;
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(,));
Console.ReadLine();
}
}
}