C# 关键字及其对组件版本控制的影响
类型
abstract表示不能构造该类型的实例
csabstract class AbstractClassA : Object { /// <summary> /// 虚方法 /// </summary> public virtual void MethodA() { Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"); } /// <summary> /// 抽象方法 /// </summary> public abstract void MethodB(); /// <summary> /// 实例方法 /// </summary> public void MethodC() { Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"); } }virtual(不允许)
override(不允许)
sealed表示该类型不能用作基类型
cssealed class SealedClassA { }如果继承该类会报如下错误:
无法从密封类型“SealedClassA”派生new表示该成员与基类中相似的成员无任何关系(仅可修饰嵌套类型)
csclass NestClass { new class SubNestClass { } }上述代码会有警告,不清楚何种情况下使用
new修饰class才能没有警告。成员“NestClass.SubNestClass”不会隐藏可访问成员。不需要关键字 new。
方法/属性/事件
abstract表示为了构造派生类型的实例,派生类型必须重写并实现这个成员
virtual表示这个成员可由派生类型重写
csclass ClassA { public virtual void MethodA() { Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"); } }override表示派生类型正在重写基类型的成员
csclass ClassB : ClassA { public override void MethodA() { Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"); } }sealed表示这个成员不能被派生类型重写,只能将该关键字应用于重写虚方法的方法
csclass ClassB : ClassA { public sealed override void MethodA() { Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"); } }new表示该成员与基类中相似的成员无任何关系
csclass ClassC : ClassB { public new void MethodA() { Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}"); } }
常量/字段
abstract(不允许)
virtual(不允许)
override(不允许)
sealed(不允许)
new表示该成员与基类中相似的成员无任何关系
csclass ClassB : ClassA { public string Name; }csclass ClassC : ClassB { public new string Name; }