C基础知识之basethisnew

白癜风能治愈吗 http://m.39.net/pf/a_7143439.html
一、Base关键词的几种用法

base重要用于OOP的多态上,base关键字用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中

1、base调用基类构造函数

usingSystem;namespaceBaseDemo{classProgram{staticvoidMain(string[]args){Bb=newB();Console.ReadLine();}}publicclassA{publicA(){Console.WriteLine("BuildA");}}publicclassB:A{publicB():base(){Console.WriteLine("BuildB");}}}

执行结果:

2、base在派生类中调用基类的方法

usingSystem;namespaceBaseDemo{classProgram{staticvoidMain(string[]args){Bb=newB();b.Hello();Console.ReadLine();}}publicclassA{publicvirtualvoidHello(){Console.WriteLine("Hello");}}publicclassB:A{publicoverridevoidHello(){base.Hello();}}}

执行结果:

二、this关键字1、this代表当前类的实例对象

usingSystem;namespacethisDemo{classProgram{staticvoidMain(string[]args){Aa=newA();a.GetName();Console.ReadKey();}}publicclassA{privatestringname="qxh";publicvoidGetName(){stringname="欢迎你";//this代表A的实例对象//所以this.name对应的是"qxh"//name对应的是GetName方法内的局部变量Console.WriteLine("{this.name}-{name}");}}}

执行结果:

2、用this串联构造函数

usingSystem;namespacethisDemo{classProgram{staticvoidMain(string[]args){Aa=newA("qxh");Console.ReadKey();}}publicclassA{publicA(){Console.WriteLine("无参构造函数");}//this()对应无参构造方法A()//先执行A(),后执行A(stringtext)publicA(stringtext):this(){Console.WriteLine(text);Console.WriteLine("有参构造函数");}}}

执行结果:

3、扩展方法

usingSystem;namespacethisDemo{classProgram{staticvoidMain(string[]args){stringname="qxh";Console.WriteLine(name.ShowInfo("欢迎你"));Console.ReadKey();}}///summary///必须是静态类////summarypublicstaticclassA{publicstaticstringShowInfo(thisstringstr,stringinfo){return"{str}-{info}";}}}

执行结果:

4、索引器:参数可以是int,也可以是string等其他类型

usingSystem;namespacethisDemo{classProgram{staticvoidMain(string[]args){Aa=newA();Console.WriteLine(a["qxh"]);Console.ReadKey();}}publicclassA{publicstringName{get;set;}//索引器[]括号里面可以是string,int,array等publicstringthis[stringindex]{get{if(index=="qxh"){returnindex;}else{return"gg";}}set{Name=value;}}}}

执行结果:

三、New关键字1、new运算符:用于创建对象和调用构造函数(1)特点

new一个class时,new完成了以下两个方面的内容:一是调用newclass命令来为实例在托管堆中分配内存;二是调用构造函数来实现对象初始化。

new一个struct时,new运算符用于调用其带构造函数,完成实例的初始化。

new一个int时,new运算符用于初始化其值为0。

new运算符不可重载。

new分配内存失败,将引发OutOfMemoryException异常。

(2)demo

staticvoidMain(string[]args){Aa=newA();//new操作符创建对象和调用构造函数Console.ReadKey();}

2、new修饰符:new关键字可以显式隐藏从基类继承的成员

new关键字可以显式隐藏从基类继承的成员。隐藏继承的成员时,该成员的派生版本将替换基类版本。虽然可以在不使用new修饰符的情况下隐藏成员,但会生成警告。如果使用new显式隐藏成员,则会取消此警告,并记录要替换为派生版本这一事实。下面是隐藏A中的Name属性

publicclassA{publicstringName{get;set;}="qxh";}publicclassB:A{newpublicstringName{get;set;}="dachong";}3、new约束:用于在泛型声明中约束可能用作类型参数的参数的类型

new约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。如果要使用new约束,则该类型不能为抽象类型。当与其他约束一起使用时,new()约束必须最后指定:

publicclassATwhereT:IComparable,new(){////}四、override关键字

要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override修饰符。由override声明重写的方法称为重写基方法。重写的基方法必须与override方法具有相同的签名。不能重写非虚方法或静态方法。重写的基方法必须是virtual、abstract或override的。用关键字virtual修饰的方法,叫虚方法。可以在子类中用override声明同名的方法,这叫“重写”。相应的没有用virtual修饰的方法,我们叫它实方法。

usingSystem;namespacethisDemo{classProgram{staticvoidMain(string[]args){Bb=newB();b.Show();Console.ReadKey();}}publicclassA{publicvirtualvoidShow(){Console.WriteLine("A");}}publicclassB:A{publicoverridevoidShow(){Console.WriteLine("B");}}}

执行结果:

五、abstract关键字

用关键字abstract定义的类即为抽象类,且只能作为基类,也不能被实例化。

用abstract定义的类不一定包含抽象方法,也可以包含非抽象方法。

abstract定义的方法一定包含在抽象类中。

抽象类不能定义为密封类(sealed),抽象方法不能使用virtual、static、private修饰符

如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。

预览时标签不可点收录于话题#个上一篇下一篇

转载请注明地址:http://www.shiquanren.net/itfl/itfl/26683.html


  • 上一篇文章:
  • 下一篇文章: 没有了
  • 公司简介 广告合作 发布优势 服务条款 隐私保护 网站地图 版权声明