接口的抽象成员
接口的成员如果不指定主体,那么就是抽象成员。
你可以主动为他们加抽象修饰符,不过没什么用。
interface I属性
{
public abstract int Hp { get; set; }
public abstract int Mp { get; set; }
}
接口的虚成员
接口的成员可以指定主体。
有主体的成员就是虚成员。你可以主动为他们加虚拟修饰符,不过没什么用。
interface I回血 : I属性
{
public void 回血()
{
Hp = 100;
}
}
虚成员视为实现此接口的成员以这种方式显式实现了这个成员。
所以你也没有办法从实现类中直接调用接口的虚成员。
class 探险王 : I回血
{
public int Hp { get; set; }
public int Mp { get; set; }
public void 睡觉()
{
((I回血)this).回血();
}
}
不是public权限的接口成员
接口成员默认访问权限是public。不是public权限的成员是有意义的。
可以限制他们只能在派生接口中通过静态成员,或虚成员实现。
这也就解释了为什么隐式实现接口一定要是public才能实现了。
因为你必须保证在我这里能调用你的方法。
另外,不能被派生接口访问的private,必须是有主体。此时抽象和虚拟修饰符都不能使用
interface I回魔
{
private void 回魔() { }
}
接口的静态抽象成员
接口最奇怪的概念是静态抽象成员。
静态意味着不能被继承,实现。而抽象意味着必须实现。
声明
接口可以声明静态抽象成员
interface I生产
{
public static abstract void 产物();
}
实现
实现类必须以静态成员实现接口的抽象静态成员。
显式隐式实现均可。
class 兵营 : I生产
{
public static void 产物()
{
Console.WriteLine("出现一只小兵");
}
}
调用
普通的方法是无法使用静态抽象成员的。
因为接口必须通过类型转换才能生效。
而静态成员无法参与类型转换。
静态抽象成员必须也只能配合后续内容的《泛型》使用。