日期:2014-05-18  浏览次数:20793 次

调用显式接口方法
郁闷,代码如下: 
class Program 
  { 
  public interface I 
  { 
  void X(); 
  } 
  public class A : I 
  { 
  protected I L { get; } 

  #region I 成员 

  void I.X() 
  { 
  Console.WriteLine("...."); 
  } 

  #endregion 
  } 
  public class B : A 
  { 
  public void Z() 
  { 
  L.X(); 
  } 
  } 
  static void Main(string[] args) 
  { 
  B b = new B(); 
  b.Z();  
  } 
  } 
================================ 
错误如下: 
================================ 
错误 1 “Ch12Ex01.Program.A.L.get”必须声明主体,因为它未标记为 abstract 或 extern C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\ConsoleApplication1\Ch12Ex01\Program.cs 16 29 Ch12Ex01 
======================== 
哪错了?我找了一个下午都没找到答案,为什么系统类:CollectionBase可以这样定义:protected IList List { get; }.而我的类A为什么不能protected I L { get; }这样定义呢?

------解决方案--------------------
A不是抽像类,也不是接口,方法都要有方法体才行。

再有你看到的CollectionBase的声明:protected IList List { get; }
只是类的定义,并不是CollectionBase的实现。实际上CollectionBase的List属性是如下声明的:
protected IList List
{
get
{
return this;
}
}
 

 

------解决方案--------------------
protected I L { get; } => 这里的get为什么不写return????
除非你这个属性设置成为abstract.