• [C#]为什么Interface里的成员不能使用static修饰?


    首先引用MSDN里的原文

    Interface members are automatically public, and they can't include any access modifiers. Members also can't be static

                      --https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interfaces/index

    即:接口成员会自动成为公共成员,不能包含任何访问修饰符。 成员也不能是静态成员。

    那么我们先不讨论编译器内部发生了什么,先从语法上来理解:为何Interface(接口)内的成员不能使用static修饰符。

    我们知道,对一个实现接口的类,可以用显式方式实现接口定义的成员,也可以用隐式方式来实现。

    那么假设可以定义带有一个静态成员 StaticString() 的接口 IStatic,并定义一个类 StaticClass 显式实现这个接口。

    public Interface IStatic{
        static String StaticString();
    }
    
    public class StaticClass:IStatic
    {
        static IStatic.StaticString();
    }

    那么我们要如何使用这个静态成员呢?既然是显式实现,那么就要以接口的形式调用此成员。而要实现此接口,就要建立一个实例。

    IStatic staticClass=new StaticClass();
    String someString=IStatic.StaticString();

    发现了吗?虽然我们声明了staticClass为一个StaticClass实例,但是我们调用成员时还是要通过IStatic接口。实际上,IStatic.StaticString()并没有指定任何一个实例,那么使用接口成员就无从谈起了。

    若我们隐式实现IStatic接口:

    public Interface IStatic{
        static String StaticString();
    }
    
    public class StaticClass:IStatic
    {
        public static String StaticString();
    }

    那我们就要这样使用StaticString成员:

    IStatic staticClass=new StaticClass();
    String someString=StaticClass.StaticString();

    同样,虽然StaticClass实现了IStatic接口,但是在使用静态成员时我们仅以StaticClass来进行调用,与IStatic接口没有任何的关系。

    因此,无论是显式实现还是隐式实现接口的静态成员,实际使用上都是没有意义的,也就不难理解为何在C#里面为何接口成员(包括接口本身)为何不能使用static修饰词了。


    以下是笔者的闲谈:

    在不同的书本上已经不止一次看到对于接口修饰词的说明了,包括C# in depth等,但是由于书中一般只会进行一两句话的描述,因此在笔者脑海里一直没有形成知识体系。而由于工作的性质,我也很少或者没有用到C#里关于面向对象的性质。最近在写一个WebAPI接口的工具类中突然要写数个接口,突然回想起这个性质。

    其实本质很简单,但是要形成脑海里的知识体系,个人认为还是将它用最浅显的方法演示一次更为有效。

  • 相关阅读:
    PHP正则表达式
    PHP日期时间处理
    好文摘录
    Unix时间戳与C# DateTime时间类型互换
    dedecms表结构分析
    css默认值汇总
    jQuery offset,position,offsetParent,scrollLeft,scrollTop html控件定位 css position
    html中label宽度设置、非替换元素和替换元素
    css position, display, float 内联元素、块级元素
    CSS技巧(一):清除浮动
  • 原文地址:https://www.cnblogs.com/mirageJ/p/8334762.html
Copyright © 2020-2023  润新知