C#和Java接口对比

C#和java的接口有很多类似之处,对于编程约束和设计模式的实现有重要作用。这里记录几个知识点。

1. C#的接口中不能有字段,但Java的接口中允许有static final修饰的字段/域(field)。
2. Java的接口中一般包含方法签名和上述的static final修饰的域(Java的类成员一般包括构造函数,析构函数,普通方法,域)。C#的接口中可以包含方法签名,属性,事件,索引等,实际上,C#中的这些类成员在编译成IL时都会进行处理转为方法。
3. 接口中的方法签名都不能是静态的。
4. 语法形式上,接口中的方法都是公共的,Java的接口中的方法签名可以显示声明public或者不声明,C#接口中的方法签名不允许显示声明public。
5. 实现上,接口都是一种行为约束,表示类具有某种能力。共同点是,都可以在实现接口的类中,用public实现(而且是必需实现)接口中所有的方法签名。不同的是,C#接口独有的显示实现。C#的类中对接口的显示实现注意一下几点:1)显示实现时方法不用public修饰(但默认为public)。2)显示声明的方法只能由接口调用,类及其实例不能调用。3)类实现某一接口时,可以只一般实现接口成员(public),显示实现接口成员(只能通过接口调用),也可以同时一般实现和显式实现共存(共存时规则不变,一般实现可以由接口或者类变量调用,显式实现只能由接口的变量调用)。

interface IInterface
{
    string AProperty { get; set; }
}

class TestClass:IInterface
{
    public string AProperty { get; set; }
    string IInterface.AProperty { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        TestInterface();
        Console.ReadKey();
    }

    private static void TestInterface()
    {
        IInterface aInterface = new TestClass();
        TestClass aClass = new TestClass();
        aInterface.AProperty = "aaaaaaaaaa";
        aClass.AProperty = "bbbbbbbbbb";
        Console.WriteLine(aInterface.AProperty);
        Console.WriteLine(aClass.AProperty);
    }
}
原文地址:https://www.cnblogs.com/myseasky/p/6704287.html