C#关键字--修饰符
来源:互联网 发布:淘宝老客户维护 编辑:程序博客网 时间:2024/06/05 10:25
访问修饰符:public、protected、private、internal
用于指定声明的成员或类型的可访问性。
public:不受限
protected:仅限于包含类或包含类派生的子类
internal:当前程序集
protected internal:internal 或 protected ,两者求并集
private:当前包含类型abstract
指示被修改内容的实现已丢失或不完整。
可用于修饰类、方法、属性、索引和事件。- 抽象类
抽象类不能实例化
包含0个或1个以上抽象方法和访问器(属性) ,抽象类中不一定有抽象方法或抽象访问权(属性)
不能用sealed修饰,sealed和abstract具有相反的含义。sealed类不能被继承,abstract类要求被继承 - 抽象方法和抽象属性
指示方法或属性不包含实现
抽象方法是隐式的虚方法
只有抽象类中才有抽象方法声明
通过override在派生类中重写替代抽象方法或属性
抽象类必须为所有实现的接口提供实现,可将接口映射到抽象方法上,例如:
interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}
- 抽象类
sealed
断子绝孙符
修饰类时,类不可以被继承
修饰方法/属性时,子类不能替代此方法或属性virtual
用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写
虚成员的实现可由派生类中的替代成员更改
虚方法就是有默认实现的抽象方法
在修饰方法时override和new的区别:
override只能重写virtual、abstract、override修饰的方法
new是隐藏,可通过类型转换调用到基类的方法。
override是重写,无论是派生类还是基类都会找到派生类方法。
new可以隐藏基类中的普通方法,也可以隐藏基类中的虚方法。
new可以修改方法可访问性,而override不可以。
public class A { public void method1() { Console.WriteLine("this is A method1"); } public virtual void method2() { Console.WriteLine("this is A method2"); } public void method3() { Console.WriteLine("this is A method3"); } public virtual void method4() { Console.WriteLine("this is A method4"); } } public class B : A { public void method1() { Console.WriteLine("this is B method1"); } public override void method2() { Console.WriteLine("this is B method2"); } public new void method3() { Console.WriteLine("this is B method3"); } //private virtual 错误 //private virtual void method4() //{ // Console.WriteLine("this is A method4"); //} //private override 错误 //private override void method4() //{ // Console.WriteLine("this is A method4"); //} //private new 正确 private new void method4() { Console.WriteLine("this is A method4"); } } public static void main() { A a1 = new A(); A a2 = new B(); B a3 = new B(); Console.WriteLine("A A*******************"); a1.method1(); a1.method2(); a1.method3(); Console.WriteLine("A B*******************"); a2.method1(); a2.method2(); a2.method3(); Console.WriteLine("B B*******************"); a3.method1(); a3.method2(); a3.method3(); Console.WriteLine("(A) A B*******************"); ((A)a2).method1(); ((A)a2).method2(); ((A)a2).method3(); Console.WriteLine("(A) B B*******************"); ((A)a3).method1(); ((A)a3).method2(); ((A)a3).method3(); }
输出结果:
A A*******************
this is A method1
this is A method2
this is A method3
A B*******************
this is A method1
this is B method2
this is A method3
B B*******************
this is B method1
this is B method2
this is B method3
(A) A B*******************
this is A method1
this is B method2
this is A method3
(A) B B*******************
this is A method1
this is B method2
this is A method3
abstract、virtual、override、new
abstract和virtual都是用于修饰基类方法
virtual有默认实现,abstract无实现
abstract方法一定是在抽象类中出现,virtual不一定
override用于重写abstract、virtual和override修饰的方法
new用于隐藏基类中的普通方法或override修饰的方法
new可修改方法的可访问性,override不可以
new隐藏的方法可通过对象类型转换进行调用,override对象类型转换后调用的还是派生类的方法
- C#关键字--修饰符
- C#关键字之修饰符
- async修饰符,await运算符关键字(C# 参考)
- C#基础必读 修饰符、关键字、数据类型辨析
- new关键字用作修饰符
- java修饰符(static关键字)
- 类型修饰符volatile关键字
- java修饰符:transient关键字
- java修饰符:volatile关键字
- java修饰符:Synchronize关键字
- java修饰符:static关键字
- 类型修饰符const关键字
- Java修饰符和关键字
- iOS 关键字~@property 修饰符
- C#修饰符总结
- C# 修饰符
- c# 修饰符总结
- C#中的修饰符
- 动态链接库给传入指针赋值,调试时有可能调试器会欺骗你。
- AAAAAAAAAAAAAAAA
- iOS 块枚举与for循环
- error:Operation not allowed after ResultSet closed
- 对集合进行排序
- C#关键字--修饰符
- AngularJS入门-(6)表达式
- JavaScript 变量
- 个人比较感兴趣的android开源项目
- scala断言专栏--选择项目的测试样式
- GRADLE自定义你的BUILDCONFIG
- 无人超市解决方案
- final
- RPC原理及RPC实例分析