none
为什么静态方法不能实现接口 RRS feed

  • 问题

  •  class Program
        {
            public static string strTest = "OK!";
            static object _t = new object();
            static void Main(string[] args)
            {
                A.Hello();
                Console.ReadKey();
            }
        }
        public interface IA
        {
            void Hello();
        }
        public class A : IA
        {

            #region IA 成员

            public static void Hello()
            {
                Console.WriteLine("OK");
            }

            #endregion
        }
    2009年12月21日 2:20

答案

  • 你好!
         接口可以除了可以包括方法外,还可以包括事件,属性,因为他们都会映射为方法!
         实际上CLR(公共语言运行时)还允许接口包括静态方法,静态字段,常数,以及静态构造器,这和接口的语义并没有矛盾!
         但是CLS(通用语言规范)不允许接口有静态成员,因为某些语言不能定义和访问静态成员,这就给语言之间的交互带来问题!所以C#编译器不允许接口包括静态成员!
         希望这个解释对你有帮助!
    周雪峰
    • 已标记为答案 male110 2009年12月21日 5:37
    2009年12月21日 3:40
    版主

全部回复

  • 接口是用来约束实例的,不支持任何静态成员...静态的概念本来就不符合面向对象的思想...

    接口中只能定义实例方法或者属性。
    努力+方法=成功
    2009年12月21日 2:26
  • 如果是静态方法 所有实例都可以通过类来访问的 static 可以参考这里 http://msdn.microsoft.com/zh-cn/library/79b3xss3(VS.80).aspx
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年12月21日 2:59
    版主
  • 你好!
         接口可以除了可以包括方法外,还可以包括事件,属性,因为他们都会映射为方法!
         实际上CLR(公共语言运行时)还允许接口包括静态方法,静态字段,常数,以及静态构造器,这和接口的语义并没有矛盾!
         但是CLS(通用语言规范)不允许接口有静态成员,因为某些语言不能定义和访问静态成员,这就给语言之间的交互带来问题!所以C#编译器不允许接口包括静态成员!
         希望这个解释对你有帮助!
    周雪峰
    • 已标记为答案 male110 2009年12月21日 5:37
    2009年12月21日 3:40
    版主