M. *_*sif -3 c# inheritance overriding properties
我有一个'base',它有一个virtual int
名为'id' 的自动实现属性.
class bbase
{
public virtual int id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我从这个类继承到'派生'类时,我得到:
class Derived : bbase
{
public override int id
{
get
{
return base.id;
}
set
{
base.id = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
初始化基类和派生类并将值分配给基类属性后,如下所示:
bbase b2 = new bbase();
Derived d2 = new Derived();
b2.id = 6;
Run Code Online (Sandbox Code Playgroud)
当我尝试从派生类输出值时,它输出'0':
Console.WriteLine(d2.id);
Run Code Online (Sandbox Code Playgroud)
我的困惑是,当我尝试使用虚拟方法的相同方法时,它工作正常.base.method()
工作正常的派生类方法.它返回基本方法中的任何内容,但为什么不返回自动实现的属性?
class bbase
{
public virtual void execute() { Console.WriteLine("base.execute2"); }
}
class Derived : bbase
{
public override void execute()
{
base.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
两者都是两个独立的对象.所以你看到的是预期的结果.
你试图嘲弄就是可以,如果你重新写你的代码来完成,使这两个变量b2
和d2
指向Derived
类的物体,像下面:
Derived d2 = new Derived();
bbase b2 = d2;
b2.id = 6;
Run Code Online (Sandbox Code Playgroud)
现在,如果你这样做:
Console.WriteLine(d2.id); // prints 6
Run Code Online (Sandbox Code Playgroud)
您将看到上面设置的相同值.
理想情况下,我认为你不应该base
像上面的情况一样在属性getter和setter中调用那种方式,因为你没有对base的值做任何特殊的事情,所以,而不是只使用默认值get
和set
派生类似:
class Derived : bbase
{
public override int id
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你写下面的内容:
Derived d2 = new Derived();
bbase b2 = d2;
b2.id = 6;
Console.WriteLine("d2:"+d2.id);
Console.WriteLine("b2: "+b2.id);
Run Code Online (Sandbox Code Playgroud)
它将输出:
第2:6
b2:6
看到工作DEMO小提琴了解它.
归档时间: |
|
查看次数: |
105 次 |
最近记录: |