62,266
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
iicar mycar = new middlecar();
mycar.ReduceWheel();
Console.WriteLine(mycar.Wheel);
Console.ReadKey();
}
}
internal abstract class car : iicar
{
private int wheel;
public int Wheel
{
get { return this.wheel; }
set { this.wheel = value; }
}
public abstract int AddWheel();
public virtual void ReduceWheel()
{
this.wheel--;
}
}
internal class middlecar : car
{
private int wheel = 4;
public override int AddWheel()
{
return ++this.wheel;
}
public new int Wheel
{
get { return this.wheel; }
set { this.wheel = value; }
}
public override void ReduceWheel()
{
this.wheel = this.wheel - 2;
}
}
interface iicar : icar
{
int AddWheel();
void ReduceWheel();
}
interface icar
{
int Wheel
{
get;
set;
}
}
}
1. Car中 public int Wheel
MiddleCar中 public int Wheel(注意,这样写会有警告,但是不会报错)
2. Car中 public int Wheel
MiddleCar中 public New int Wheel
3. Car中 public virtual int Wheel
MiddleCar中 public New int Wheel
最后调到的mycar.Wheel都是调用父类,也就是Car的Wheel,这个Wheel只有申明,没有复制,默认初始化为0
这个叫早帮定,也就是编译的时候就决定了调用的是Car的Wheel
而晚绑定要这样写。
Car中 public virtual int Wheel
MiddleCar中 public Override int Wheel
此时,编译器发现有Virtual/Override配套关键字,那么它调用的就是类申明类型的字段,而是实例化这个类的字段,也就是用MiddleCar来实例话,那么调到的Wheel自然是MiddleCar中的Wheel了~