接口新语法概览
C#接口不仅仅可以含有普通的不带访问修饰符的方法签名了,还可以包含带默认实现的方法、私有方法等等
public interfaceIOverall
{
// 最普通的方法
void Foo();
// 属性
stringName{get;set;}
// 索引器
intthis[int index]{get;set;}
// 事件
eventEventHandlerOnNameChanged;
// 带默认实现的方法
void Bar()=>Console.WriteLine("Bar");
// 私有方法(需要带默认实现)
private void NonPublicMethod1()
{
}
// 受保护方法(需要带默认实现)
protected void NonPublicMethod2()
{
}
// 静态方法(需要带默认实现)
static void StaticMethod()
{
Console.WriteLine("StaticMethod");
}
// 抽象静态方法
static abstract void AbstractStaticMethod();
// 虚静态方法(需要带默认实现)
static virtual void VirtualStaticMethod()
{
Console.WriteLine("VirtualStaticMethod");
}
}
属性和事件
其实属性的本质是含有get和set的方法,但是接口中的属性和事件与类中的并不相同:
-
• 接口中的属性和实现其实只是在声明属性的 getter/setter 以及事件的 add/remove
-
• 类中的属性和事件则会后台生成对应的私有字段
索引器则类似:
-
• 接口中只是在声明索引器的 getter/setter
-
• 类中的索引器除非被标记为了 abstract,否则必须给出默认实现
public interfaceIPropertyAndEvent
{
stringName{get;set;}
stringthis[string key]{get;set;}
eventEventHandler?OnNameChanged;
}
publicclassClassWithPropertyAndEvent
{
publicstringName{get;set;}="";
publicstringthis[string key]
{
get=>"";
set{}
}
publiceventEventHandler?OnNameChanged;
}