




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第一部分2 访问关键字:base,this3 base访问基类的成员。用于从派生类中访问基类的成员,1.调用基类上已经被重写的方法。2.指定创建派生类实例时应调用的基类构造函数。*对基类的访问只能在 派生类的构造函数 实例的方法 实例的属性访问器 中。属性访问器:get,set函数。注意:!不能在静态方法中使用base关键字。例:在子类的方法中写 base.GetInfo();调用基类的方法。基类中的构造函数重载了,Mybase()和Mybase(int i);在子类的构造函数中public MyDerived():base(int i)public MyDerived(int i):base()this:引用当前对象。用于引用为其调用方法的当前实例。静态成员函数没有this指针。可以用于从 构造函数,实例方法,实例访问器 中访问成员。this的一般用途:1.限定被相似的名子隐藏的成员public void A(int a, int b ) this.a=a; this.b=b;2.将对象作为参数传递到函数中public void ShowInstance() print(this); console.writeline(lalalalllalalala);3.声明索引器public int thisint param get return arrayparam; set arrayparam=value; 注意!静态方法,静态属性访问器或字段声明中不能用this。 二.转换关键字:explicit, implicit, operator1explicit:用于声明用户定义的 显式类型转换运算符。例: class MyType public static explicit operator MyType(int i) /从int显式转换成MyType类型的代码! 显式类型转换符必须通过类型转换调用。需要在转换失败时抛出异常。if(转换失败的条件)throw new ArgumentException();int i;MyType x = (MyType)i;注意!如果转换可能导致信息丢失,则使用explicit关键字。2implicit:用于声明用户定义的 隐式类型转换运算符。例:class MyType public static implicit operator int(MyType i) /从MyType隐式转换成Mint类型的代码! MyType i;int x = i;注意!由于隐式转换在程序员未指定的情况下发生,所以必须防止出现不良的后果。只有在一定不会出现异常和信息丢失时才可以使用implicit,否则使用expicit。3operator:用于声明用户在类或结构中自定义的运算符。有四种形式:public static 结果类型 operator unary-operator (参数类型 参数名)public static implict operator 目标类型 (输入类型 参数名) public static explict operator 目标类型 (输入类型 参数名) /implict中,目标类型一般是封闭类型,例如:int, double, byte等。/explict中,目标类型一般是自定义类型,例如:MyType等。 三.文字关键字:null,false,true1null:表示不引用任何对象的空引用的值。null是引用类型的默认值。2true: true运算符:用户自定义的类型可以重载true运算符,用来表示是否满足条件,若满足则返回bool值的true,否则返回false。注意!若在自定义类型中定义了true运算符,则必须定义false运算符。 true文字值:表示bool的真。3false: false运算符:用户自定义的类型可以重载false运算符,用来表示是否满足条件,若不满足则返回bool值的true,否则返回false。注意!若在自定义类型中定义了false运算符,则必须定义true运算符。 false文字值:表示bool的假。 true和false运算符可以用在任何条件判断中。 四.方法参数关键字:params,ref,out1params:用于指定在参数数目可变处,采用参数的方法参数。只能有一个params,并且在他后面不能再有参数。方法参数:如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值using System;public class MyClass public static void UseParams(params int list) for (int i = 0 ; i list.Length; i+) Console.WriteLine(listi); Console.WriteLine(); public static void UseParams2(params object list) for (int i = 0 ; i list.Length; i+) Console.WriteLine(listi); Console.WriteLine(); static void Main() UseParams(1, 2, 3); UseParams2(1, a, test); / An array of objects can also be passed, as long as / the array type matches the method being called. int myarray = new int3 10,11,12; UseParams(myarray); 输出 1231atest101112/把1,2,3三个参数当成一个数组处理,在最后输出Console.WriteLine();2ref:使方法可以引用传递到该方法的参数。当程序跳转到调用方法处的时候,在方法中对参数所做的任何改动都将传递给参数。类似于传地址。注意!必须将参数作为ref参数 显示 的传递到方法。参数必须显示的初始化!属性不是变量不能作为ref参数传递。例子:using System;using System.Collections.Generic;using System.Text;namespace 真的是关键字 class Program public static void TestRef(ref string i) i = change once!; public static void TestNoRef(string i) i = change twice!; static void Main(string args) string i = begining!; Console.WriteLine(i); TestRef(ref i); Console.WriteLine(i); TestNoRef(i); Console.WriteLine(i); Console.ReadLine(); 输出:beginning! Change once! Change once!3.out:使方法可以引用传递到该方法的同一个变量。当程序跳转到方法调用处时,在方法中对变量所做的任何改动都将传递给该变量。注意!当希望方法返回多个值时,声明out非常有用。 一个方法可以有多个out参数。 必须将参数作为out参数显示的传递到方法。 不必初始化作为out参数的变量。 属性不是变量不能作为out变量。注意!ref参数必须显示初始化,而out参数不用。例子:using System;using System.Collections.Generic;using System.Text;namespace 真的是关键字 class Program public static int TestOut(out string i) i = change once!; return -1; static void Main(string args) string i = begining!; Console.WriteLine(i); Console.WriteLine(TestOut(out i); Console.WriteLine(i); Console.ReadLine(); 5.修饰关键字修饰符作用访问修饰符PublicPrivateInternalprotected指定声明的类型和成员的可访问性abstract指示某个类只能是其他类的基类,虚基类。Const指定无法修改字段或局部变量的值,只能在声明时初始化。Event声明一个事件Extern指示外部实现此方法Override提供从基类继承的 虚拟成员 的新实现Readonly声明的字段只能在声明时或构造函数中初始化。Sealed指定该类不能被继承Static声明对象属于类本身不属于特定的对象。Unsafe声明不安全的上下文Virtual在派生类中实现具体方法,可以重写。Volatile指示字段可以由操作系统,硬件或并发的线程等在程序中修改。1.访问关键字声明的可访问性意义public访问不受限制Protected访问仅限于包含类或从包含类派生的类Internal访问仅限于当前项目Protected internal访问仅限于包含类或从包含类派生的当前项目和类Private访问仅限于包含类不嵌套在其他类型中的顶级类型只能有public和internal可访问性,默认是internal。类型默认的成员可访问性允许的访问性枚举Public无(internal)PublicProtected类PrivateInternalPrivateProtected internal接口Public无(internal)Public结构PrivateInternalPrivate嵌套类型的可访问性取决于它的可访问域,而且不能超出包含它类型的可访问域。 2.可访问域1.可访问域:用于指定程序段中可以引用该成员的位置。如果是嵌套类型,那么它的可访问域由成员的访问级别和直接包含该成员的类型的可访问域共同决定。using System;using System.Collections.Generic;using System.Text;namespace 真的是关键字 public class T1 public static int publicInt; internal static int internalInt; private static int privateInt = 0; / CS0414 public class M1 public static int publicInt; internal static int internalInt; private static int privateInt = 0; / CS0414 private class M2 public static int publicInt = 0; internal static int internalInt = 0; private static int privateInt = 0; / CS0414 class MainClass static void Main() / Access is unlimited: T1.publicInt = 1; / Accessible only in current assembly: T1.internalInt = 2; / Error: inaccessible outside T1: / T1.myPrivateInt = 3; / Access is unlimited: T1.M1.publicInt = 1; / Accessible only in current assembly: T1.M1.internalInt = 2; / Error: inaccessible outside M1: / T1.M1.myPrivateInt = 3; / Error: inaccessible outside T1: / T1.M2.myPublicInt = 1; / Error: inaccessible outside T1: / T1.M2.myInternalInt = 2; / Error: inaccessible outside M2: / T1.M2.myPrivateInt = 3; 3.对使用可访问性级别的限制1基类的可访问性必须不小于派生类。2派生类的可访问性必须不大于基类。3成员的可访问性至少是包含它的类。例子:Class BaseClass;Public class MyClass: BaseClass;这是错误的!对使用声明的而访问型级别限制上下文备注类类类型的直接基类必须至少与类类型本身具有同样的可访问性。接口接口类型的显式基类接口必须至少与接口类型具有同样的可访问性。委托返回类型和参数类型必须至少与委托本身具有同样的可访问性。方法返回类型和参数类型必须至少与方法本身具有同样的可访问性。运算符返回类型和参数类型必须至少与运算符本身具有同样的可访问性。构造函数它的参数必须至少与构造函数本身具有同样的可访问性。字段(它是包含在类或结构中的对象或值)字段的可访问性必须至少与字段本身具有同样的可访问性。4.访问修饰关键字1internal:是类型和类型成员的访问修饰符,只有在同一个程序集中才可以访问。通俗的说就是:如果用internal修饰,那么只能在定义它的.cs文件中访问它。在别的文件中访问就会出错。 5其它修饰关键字1abstract:可用来修饰 类,方法和属性。(1)在类的声明中使用abstract,表示这个类只能作为其他类的基类,即抽象类。 抽象类的特点:a抽象类不能实例化。 b.抽象类可以包含抽象方法和抽象访问器。 c.不能用sealed修饰抽象类,否则,该类不能被继承。 d.从抽象类派生的非抽象类必须包含继承来的所有抽象方法和抽象访问器的实实现。(2) 在方法和属性中使用abstract,表示此方法或属性 不包含实现。即抽象方法和抽象属性。抽象方法的特点:A抽象方法是隐式的virtual方法。B只允许在抽象类中定义抽象方法。C抽象方法不提供实现,所以没有方法体。 格式如下:没有! Public abstract void MyMethod();D实现由重写方法提供,他是非抽象的。E抽象方法中使用virtual, static, override关键字是错误的。F静态属性上不能使用abstract关键字。G在派生类中,通过使用override 可以重写抽象的继承属性。H抽象类必须为所有接口成员提供实现,或将其映射到抽象方法上去。 / abstract_keyword.cs/ Abstract Classesusing System;abstract class BaseClass / Abstract class protected int _x = 100; protected int _y = 150; public abstract void AbstractMethod(); /Abstract methodpublic abstract int X get; /abstract property public abstract int Y get; class DerivedClass : BaseClass public override void AbstractMethod() _x+; _y+; public override int X / overriding property get return _x + 10; public override int Y / overriding property get return _y + 10; static void Main() DerivedClass o = new DerivedClass(); o.AbstractMethod(); Console.WriteLine(x = 0, y = 1, o.X, o.Y); 输出 x = 111, y = 161 2.const:用来指定字段或局部变量的之不能被修改。Public const int a=1,b=2;3.event:用于指定一个事件。指定当代码中的某些事件发生时调用的委托。此委托可以有一个或多个相关联的方法。创建事件的步骤:1.创建或标示一个委托。先有委托后定义事件。2.创建一个类,其中包含:A委托创建的事件。B调用此事件的方法。3.定义将方法连接到事件的类。4.使用事件:创建包含事件声明类的对象。4extern:表示方法在外部实现。注意!不能将extern和abstract一起使用。格式举例:public static extern int MyMethod (int x); 没有 5override:用于修改方法和属性,通过 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名。重写基方法:有重写声明的方法。注意!不能重写非虚方法或静态方法。 不能使用以下关键字修饰重写方法:new,static,virtual,abstract 重写的属性与重写的方法的要求是一样的。 重写的方法中可以调用基类的原来的virtual方法。namespace 真的是关键字 public class Square public double x; public Square(double x) this.x = x; public virtual double Area() return (x*x); class Cube : Square public Cube(double x):base(x) public override double Area() return (6*base.Area();/调用base即基类的方法。 class MainClass static void Main() double x = 5.2; Square s = new Square(x); Square c = new Cube(x); Console.WriteLine(Area of Square is0:F2,s.Area(); Console.WriteLine(Area of Cube is 0:F2, c.Area(); Console.ReadLine(); 6.readonly:只可以使用在字段上,被readonly修饰的字段的赋值只能作为 声明的一部分或者在构造函数中。 1.在声明中初始化:public readonly double a=1.1; 2.在构造函数中。readonly 关键字与 const 关键字不同:const 字段只能在该字段的声明中初始化。readonly段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数。using System;public class ReadOnlyTest class SampleClass public int x; / Initialize a readonly field public readonly int y = 25; public readonly int z; public SampleClass() / Initialize a readonly instance field z = 24; public SampleClass(int p1, int p2, int p3) x = p1; y = p2; z = p3; static void Main() SampleClass p1 = new SampleClass(11, 21, 32); / OK Console.WriteLine(p1: x=0, y=1, z=2, p1.x, p1.y, p1.z); SampleClass p2 = new SampleClass(); p2.x = 55; / OK Console.WriteLine(p2: x=0, y=1, z=2, p2.x, p2.y, p2.z); 输出p1: x=11, y=21, z=32p2: x=55, y=25, z=247.sealed:由sealed修饰的类是不能够被继承的。不允许用abstract修饰密封类。密封类:由sealed关键字修饰的类。 例子:Public sealed class MyClass Public Int a;MyClass是不能被继承的。8.static:用于声明属于类型本身而不是属于特定对象的静态成员。?注意!:常数或者类型声明隐式地是静态成员。? 不能通过实例引用静态成员。然而,可以通过类型名称引用它9.unsafe:表示不安全的上下文。任何涉及指针的操作都要求有不安全的上下文。Unsafe用作可调用成员的生命修饰符。例子:不安全范围从参数列表一直到函数结尾,所以可以在参数列表中使用指针。Static unsafe void FastCopy(byte* bt, int count) /函数体,其中可以使用指针! 若要编译非托管代码,必须指定unsafe编译器选项.10.virtual:用于修饰可以在子类中重写的方法或属性.此种方法或属性称为 虚拟成员.虚拟成员可以在派生类中用override重写.注意!:不能重写非虚方法,不能将其与static, abstract,和override起使用.不能在静态属性或方法上使用virtual.在运行时,为虚方法检查对象中是否有重写的方法,如果有,则调用重写的方法,否则调用基类的方法.10.volatile:volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值。volatile 修饰符通常用于由多个线程访问而不使用 lock 语句语句对访问进行序列化的字段。volatile 关键字可应用于以下类型:?引用类型。?指针类型(在不安全的上下文中)。?整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。?具有整数基类型的枚举类型。?已知为引用类型的泛型类型参数。?IntPtr 和 UIntPtr。所涉及的类型必须是类或结构的字段。不能将局部变量声明为 volatile例子:class MainClass public volatile int i;/定义在main函数之外,是全局变量. Test(int _i) i = _i; static void Main() / . 6命名空间关键字一.namespace1.Namespace :用于声明一个空间。其中可以包含:另一个命名空间,class,interface,struct,enum,delegate.2.每一个文件中都有默认的全局命名空间,命名空间的默认访问权限是公共的,且不可以改变。3可以在多个声明中定义一个命名空间。namespace MyCompany.Proj1 class MyClass namespace MyCompany.Proj1 class MyClass1 二UsingUsing关键字的主要用途:1.using 指令:用于为命名空间创建别名或导入其他命名空间中定义的类型。 2.using 语句:定义一个范围,在范围的末尾将处理对象。1.using指令:1.创建命名空间的别名。以便易于将标示符限定到命名空间或类。 2.允许在命名空间中使用(其他命名空间中的)类型。using 别名 = 希望被起别名的命名空间或类;例子:using System; /using 指令 using AliasToMyClass = NameSpace1.MyClass; / 为类起别名namespace NameSpace1 public class MyClass public override string ToString() return You are in NameSpace1.MyClass; namespace NameSpace2 class MyClass namespace NameSpace3 / Using directive: using NameSpace1;/using指令,可以使用其中定义的类型而不/名命名空间 / Using directive: using NameSpace2; class MainClass static void Main() AliasToMyClass somevar = new AliasToMyClass(); Console.WriteLine(somevar); 2.using 语句1.定义一个范围,在范围的末尾处理对象。注意!:在using语句中创建一个实例,可确保在using语句结束时,释放该对象。但是,被实例化的对象(他所属的类)中必须实现System.IDisposable接口中的disposable方法,就是利用该方法释放对象。例子:using System;using System.Collections.Generic;using System.Text;namespace 真的是关键字 class C : IDisposable /继承IDisposable接口 public void UseLimitedResource() Console.WriteLine(Using limited resource.); void IDisposable.Dispose()/实现Dispose()方法 Console.WriteLine(Disposing limited resource.); class Program static void Main() using (C c = new C() c.UseLimitedResource(); Console.WriteLine(Now outside using statement.); Console.ReadLine(); 输出:Using limited resource.Disposing limited resource.Now outside using statement.语法:using (C c = new C() c.UseLimitedResource(); 在CLR决定让GC回收某些有限资源之前释放它们,有时很有用,尤其对于象文件句柄,网络连接的有限资源。7.运算符关键字一as作用:用于执行可兼容类型之间的转换。语法格式:expression as type例子:string s = objArrayi as string;1.As运算符类似于类型转换,不同的是,当转换失败时,类型转换将引发异常,而,as运算符将返回空即NULL。2.其中的expression表达式只被计算一次。例子:using System;class Class1class Class2class MainClass static void Main() object objArray = new object6; objArray0 = new Class1(); objArray1 = new Class2(); objArray2 = hello; objArray3 = 123; objArray4 = 123.4; objArray5 = null; for (int i = 0; i objArray.Length; +i) string s = objArrayi as string; Console.Write(0:, i); if (s != null) Console.WriteLine( + s + ); else Console.WriteLine(not a string); 输出:0:not a string1:not a string2:hello3:not a string4:not a string5:not a string二Is关键字1.Is:用于检查对象在运行时的类型是否与给定类型兼容。2.语法格式:expression is type例子:3.当expression为非空并且可以被转化为type类型时,整个表达式返回true,否则返回false。4.is运算符不能被重载。例子:using System;class Class1class Class2class IsTest static void Test(object o) Class1 a; Class2 b; if (o is Class1) Console.WriteLine(o is Class1); a = (Class1)o; / Do something with a. else if (o is Class2) Console.WriteLine(o is Class2); b = (Class2)o; / Do something with b. else Console.WriteLine(o is neither Class1 nor Class2.); static void Main() Class1 c1 = new Class1(); Class2 c2 = new Class2(); Test(c1); Test(c2); Test(a string); 输出:o is Class1o is Class2o is neither Class1 nor Class2.3.new关键字New关键字在C#中可以用作:1.运算符 2.修饰符New运算符:用于在堆上创建对象和调用构造函数。New修饰符:用于隐藏基类成员的继承成员。一New运算符:用于在堆上创建对象和调用构造函数。二堆是在运行是根据需要分配的,而栈在编译时分配的。例子:Class1 o = new Class1();int i = new int();为值类型调用默认构造函数,i=0;注意!:为结构声明默认构造函数是错误的。但是可以声明参数化构造函数。值类型对象是在栈(stack)上创建的,而引用类型是在堆(heap)上创建的。不能重载new关键字对值类型如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市场推广方案撰写指导手册
- 古诗文经典赏析与教学资源包
- 幼儿园体育健康活动教学设计
- 高职新生入学典礼演讲稿范例
- 咬合桩施工技术流程及常见问题
- 基于信息技术的小学科学实验教学方案
- 工业企业节能降耗技术应用指南
- 企业内部门户网站需求分析报告
- 11.《种树郭橐驼传》课件
- 幼儿园建筑装饰施工组织设计方案
- 质量信得过班组培训课件
- DL∕T 1768-2017 旋转电机预防性试验规程
- 农户化肥购买合同书
- 穴位按摩法操作评分标准
- 充电站运营管理制度(参考模板)
- 体育与健康教学设计《手倒立前滚翻》
- JJG 20-2001标准玻璃量器
- 2024外研版初中英语单词表汇总(七-九年级)中考复习必背
- 《大数据平台部署与运维》课程标准(含课程思政)
- 英语中的时间表达(示范课例)
- 《史记》上册注音版
评论
0/150
提交评论