假如我现在有一个接口
public interface ITax
{
double Calculate();
}
我现在显示的实现这个接口
public class ChinaTax:Tax
{
double ITax.Calculate()
{
return (Constant.BASE_STATAR + (Constant.BASE_STATAR * 0.1)) * 0.4;
}
#endregion
}
在这里我想请问 这里为什么可以ITax.Calculate()这样来实现这个接口中的方法。这是语法规定吗?
接下来如果我要调用ChinaTax这个类中的Calculate()这个方法的时候我必须这样来访问
ITax t=new ChinaTax();
然后通过t来访问这个方法 t.Calculate();
我想请问下 这里为什么可以ITax t=new ChinaTax();这样实例化。
希望各位帮帮解释下
显式接口实现是一种语法,但并不是强制的,其主要作用是防止不同接口中的同签名方法的存在,如:
public interface IA {
void Do();
}
public interface IB {
void Do();
}
public class MyClass : IA, IB {
public void Do() { Console.WriteLine("MyClass Do"); } //标准实现
void IA.Do() { Console.WriteLine("IA Do"); } //显式实现
}
在这种情况下,如果使用:
MyClass c = new MyClass();
c.Do();
会输出MyClass Do
使用:
IB c = new MyClass();
c.Do();
也会输出MyClass Do
使用:
IA c = new MyClass();
c.Do();
会输出IA Do
这样就通过接口的显式实现区别了IA和IB的Do方法
1.
隐示实现接口和类都可以访问:
你可以再ChinaTax隐式实现Calculate 这个方法。
显示实现只有接口可以访问。
例如: ChinaTax tt = new ChinaTax(); 如果你是显示实现,则无法访问Calculate方法。
2.这里为什么可以ITax t=new ChinaTax();这样实例化。
ChinaTax是接口的一种实现类。