作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在几个不同的类中私下使用一个接口(interface)。但是,我不会让我在下面看到的 getter 中调用函数:
public abstract class PreFabComponent : IAccountable
{
//This represents the cumulative cost of all members, connectors, and supporting hardware
private double materialsCost;
protected double MaterialsCost
{
get
{
materialsCost = CalculateSelfCost();
return materialsCost;
}
}
// Returns the sum of all Cumulative costs
double IAccountable.CalculateSelfCost()
{
double sum = 0;
foreach (IAccountable item in accountableItemsContatined)
{
sum += item.CalculateSelfCost();
}
return sum;
}
}
这是界面
interface IAccountable
{
double CalculateSelfCost();
}
我该如何解决这个问题?
最佳答案
您需要进行显式转换:
private double materialsCost;
protected double MaterialsCost
{
get
{
materialsCost = (this as IAccountable).CalculateSelfCost();
return materialsCost;
}
}
基本上,显式接口(interface)方法实现与类的其他方法是分开的。如果不显式转换到包含接口(interface),您根本不能调用它们。实际上,从某种意义上说,您的类中没有虚方法 CalculateSelfCost
。
如果您想了解更多相关信息,这是一个很好的开始 - http://msdn.microsoft.com/en-us/magazine/cc163791.aspx (专门查找 MethodTable
部分)。您可以看到您正在实现的接口(interface)的方法表与您的类本身的方法表是分开的。在隐式接口(interface)方法实现的情况下,主方法表和接口(interface)方法表都包含引用,而在显式实现中,主方法表根本没有引用。现在,像这样的细节对于最终程序员来说通常根本不重要,但我希望这能满足您的好奇心 :)
这还有一些与内部结构或封装实践无关的实际原因,例如,如果您有两个具有相同签名但在两个不同接口(interface)上的方法的显式实现,您实际上会调用哪个?您无需尝试解决歧义,只需始终正确调用该方法,并包含显式接口(interface)。
关于c# - 如何私下使用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831853/
我是一名优秀的程序员,十分优秀!