c#延迟绑定
本文关键字:绑定 延迟 | 更新日期: 2023-09-27 18:12:00
我有一个"简单"的问题,我创建了一个示例应用程序来说明。我希望b.getName()
调用返回"barname",但它没有,我不确定如何让它工作。我已经使用c#很多年了,但现在我觉得自己像个新手,因为这个后期绑定问题把我难住了。
class Program
{
static void Main(string[] args)
{
bar b = new bar();
Console.WriteLine(b.getName());
Console.ReadLine();
}
}
class foo
{
string name = "fooname";
public string getName()
{
return this.name;
}
}
class bar:foo
{
string name = "barname";
}
默认情况下,您的name
变量是私有的-听起来像您希望它是protected
,所以您可以覆盖该值-这将工作:
class foo
{
protected string name = "fooname";
public string getName()
{
return this.name;
}
}
class bar : foo
{
public bar()
{
name = "barname";
}
}
如果你不喜欢使用私有类变量,你可以通过重写属性来实现:
class foo
{
public virtual string Name
{
get
{
return "fooname";
}
}
}
class bar : foo
{
public override string Name
{
get
{
return "barname";
}
}
}
这与后期绑定无关。后期绑定通常是指在运行时从名称调用方法。
你所提供的代码实际上是创建一个新的变量,它的作用域与你的基类所访问的作用域不同。
为了获得期望的效果,您实际上需要1)使基类方法实现为虚的,并在您的子类中重写该方法,或者2)在您的基类中将变量更改为具有默认可访问性protected
并在派生类的构造函数中设置该值。