c# 多态 虚方法
2021-06-19 16:07
标签:fun linq add [] ace string rac sealed ret 多态: 为了解决同一种指令,可以有不同行为和结果 在运行时,可以通过调用同一个方法,来实现派生类中不同表现。 虚方法——抽象类——抽象函数——接口 虚方法: 被virtual 关键字修饰的方法 叫做 虚方法 虚方法通常写在你要继承的父类中, 用virtual 关键字去修饰子类要重写的方法 让我不同的子类对象,对统一指令有不同的行为 1.虚方法在调用,会攻击你运行时,实际的对象和最后重写的方法,去决定运行哪一个 2.如果你是非虚方法,是需要转成对应的对象,才能执行对应的方法 3.子类只能重写同参数列表同返回类型同名的虚方法 4.不要在子类中去声明一个和虚方法同名的新方法,虚方法会被new给隐藏掉 sealed: 1.可以密封一个虚方法的重写,导致新的派生类无法重写 2.密封一个类 ,使这个类无法被派生 c# 多态 虚方法 标签:fun linq add [] ace string rac sealed ret 原文地址:https://www.cnblogs.com/DGJS/p/10277398.htmlusing 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();
}
}
}
下一篇:window清理垃圾