现在的位置: 首页 > 综合 > 正文

C# 语法学习笔记

2012年10月11日 ⁄ 综合 ⁄ 共 8438字 ⁄ 字号 评论关闭

 

  1 A.类:
  2 ● 类与类的使用:
  3 class A{
  4 public int wheels; \\公有成员
  5 protected float weight; \\保护成员
  6 }
  7 class B{
  8 void F{
  9 A v1=new A(); \\创选类A的实例
 10 v1.wheels=10; \\调用类A的公有成员成功
 11 v1.weight=1.0; \\错,因为此变量为保护成员
 12 }
 13 
 14 ● 类的继承:
 15 类B从类A中继承
 16 class A{}
 17 class B:A{}
 18 
 19 
 20 B.静态成员和非静态成员:
 21 一般说来,静态成员属于类所有的,非静态成员则属于类的实例--对象
 22 (非静态成员在类的每个实例中都占有一个存储(或者说具有一个副本),
 23 而静态方法是类所共享的,无法判断当前的非静态属于哪个类的实例.
 24 引用静态与非静态成员:
 25 int a; //非静态成员
 26 static int b; //静态成员
 27 void F(){ //非静态方法F
 28 a=1//正确,等价于this.x=1
 29 b=1//正确,等价于Test.y=1
 30 }
 31 static void G(){
 32 a=1//错误,不能访问this.x
 33 b=1//正确,等价于Test.y=1
 34 }
 35 static void Main(){
 36 Test t=new Test();
 37 t.a=1//正确
 38 t.b=1//错误,不能在类的实例中访问静态成员
 39 Test.a=1//错误,不能在类问非静态成员
 40 Test.y=1//正确
 41 }
 42 ● 在同一类的引用
 43 非 访 非=直接(可用this.X) 静 访 静=
 44 非 访 静= Test.a 静访非=创造实例=t.a
 45 Test t= newTest();创造实例后用qf.F()访问< /FONT>< /FONT> 
 46 
 47 C.this 保留字在各种结构中的含义: 实例=类的结构
 48     .(类的构造函数)值类型,对构造的对象本身的引用
 49     .(类的方法)值类型,对调用该方法的对象的引用
 50 .(结构的构造函数)变量类型,对构造的结构的引用
 51 .(结构的方法)变量类型,对方法的结构的引用 
 52 
 53 D.构造函数析构函数 (作用用于执行类的实例的初始化)
 54 ● 通常与类名相同
 55 ● 不声明反回类型
 56 ● 一般是public类型,如是private表明类不能被实例化,这通常用于只含有静态成员的类
 57 ● 不要做对类的实例进行初始化以外的事情,也不要尝试显式地调用构造函数
 58 intx=0,y=0,count; //不带参数的
 59 public A(){
 60 count=0;
 61 }
 62 public A(int vx.int vy){ //带参数的
 63 x=vx;
 64 y=vy;
 65 
 66 
 67 E.方法
 68 ● 不能与类中的成员名相同
 69 ● 用abstract和extern修饰方法的执行有一个简单的分号
 70 ● 执行部份通过return语句得到返回值,return后不跟任何值,反回的是void型
 71 ● (非静态成员在类的每个实例中都占有一个存储(或者说具有一个副本),
 72 而静态方法是类所共享的,无法判断当前的非静态属于哪个类的实例. 
 73 ● 值参数,给值做一份拷贝
 74 ● 引用型参数ref
 75 ● 输出参数out
 76 ● 数组型参数params(否则提示重载) 
 77 
 78  
 79 
 80 static int max(intx,int y){
 81 if(x>y)
 82 return x; 
 83 else
 84 return y;
 85 }
 86 static void Main(){
 87 Console.WriteLine("10与8那个大:{0}",max(10,8));
 88 }
 89 
 90 
 91 F.属性
 92 ● 在C#中不直接操作类的数据内容,而是通过访问器进行访问.借助于get和set对属性的值进行读写
 93 ● 只有set,只能设置不能读出
 94 ● 只有get,只读不能改写
 95 ● 同时具有set和get,读写都是允许的.
 96 ● 除使用abstract修饰抽象属性,每个访问器的执行体中只有分号";",其它所有属性的get访问器都昌通
 97 过return来读取属性的值,set访问器都通过value来设置属性的值.
 98 
 99 public class File
100 {
101 private string s_filename;
102 public string Filename{
103 get{ \\读
104 return s_filename;
105 }
106 set{ \\写 
107 if(s_filename!=value){
108 s_filename=value; \\过通value设置属性
109 }
110 }
111 }
112 }
113 public class Test
114 {
115 public static void Main(){
116 File f=new File();
117 f.Filename="myfile.txt";
118 string s=f.Filename;
119 }
120 }
121 
122 
123 G.接口(interface)默认为public修饰
124 下面的例子定义了一个名为IControl的接口,接口中包含一个成员方法Paint
125 接口ITextBox和IListBox都从接口IControl中继承,承者也就继承了接口IControl的Paint方法:
126 using System;
127 interface IControl { void Paint(); }
128 interface ITextBox:IControl { void SetText(string text); }
129 interface IListBox:IControl { void SetItems(string[]items); }
130 interface IComboBox:ITextBox,IListBox{}
131 
132 
133 ★ 第十七章 文件操作
134 A.入输出操作的类型
135 .支持字节的读写操作 System.IO.Stream 包括
136 ● 读操作Reading 
137 ● 写操作Writing
138 ● 搜索操作Seeking,有些流不支持以上的所有操作,如网络流就不支持搜索操作
139 .BinaryReader和BinaryWriter支持从字符串或原始数据到各种流之间的读写操作
140 .File和Directory类的基类都是抽象类FileSystemEntry
141 ● File对文件的基本操作,包括创建\拷贝\移动\删除和打开一个文件
142 ● Directory类执行常见的各种目录操作,如创建\移动\游戏目录及其子目录
143 ● 
144 ● 
145 
146  
147 
148  
149 
150 类的方法默认为受保护修饰
151 
152  
153 
154  
155 
156 Main()函数的参数只有两种参数形式:无参数和string 数组表示的命令行参数,即static void Main()或static void Main(string[]args) ,后者接受命令行参数。一个C#程序中只能有一个Main()函数入口点。其他形式的参数不具有入口点语义,C#不推荐通过其他参数形式重载Main()函数,这会引起编译警告.
157 Main()函数返回值只能为void(无类型)或int(整数类型)。其他形式的返回值不具有入口点语义。
158 
159  
160 
161 a=new 代理1(类1.方法1) //把类的一个方法赋给a
162 a(); //输出 类1 中一个方法的值
163 ------------类修饰符-------------
164 public //公有成员,不限制对该类的访问
165 protected //保护成员,只能从所在类和所在类派生的子类进行访问
166 internal //内部成员,只有其所在类才能访问
167 private //私有成员,只有对包.Net中的应用程序或库才能访问
168 abstract //抽象类,不允许建立类的实例
169 sealed //密封类,不允许被继承
170 -------------方法修饰符----------
171 new
172 public
173 protected
174 internal
175 private
176 static
177 virtual //虚方法
178 sealed
179 override //派生类中声明虚方法
180 abstract
181 extern
182 ---------------------------------
183 
184 
185 一、数据类型
186 
187 1.整数类型
188 短字节型(sbyte)、字节型(byte)、短整型(short)、无符号短整型(ushort)、
189 整型(int)、无符号整型(uint)、长整型(long)、 
190 
191 2.布尔类型
192 '''' 用true和false表示 
193 
194 3.实数类型
195 浮点类型: 单精度(float)和双精度(double
196 十进制类型(decimal) //定义十进制变量并赋值时,用m下标表明它是十进制类型.如省略了m下标,
197 //在被赋值前,它将被编译器当作双精度处理。如:decimal d_value=1.0m;
198 4.字符类型
199 char c='A'//字符类型采用了国际gb2312字符集标准.一个gb2312的标准字符长度为16位.
200 
201 5.结构类型
202 struct //程序设计中经常要把一组相关的信息放在一起.一系列相关的变量组织成为单一实体的过程,
203 //称为生成结构的过程.这个单一实体的类型我们就叫做结构类型,每一个变量称为结构的成员。
204 //结构类型采用struct来声明.下面代码定义一个通讯录记录结构(包括姓名、电话和地址)的定义。
205    Struct PhoneBook{
206    public string name;
207    public string phone;
208    public string address;
209    }
210    PhoneBook p1;
211 //p1就是一个通讯录(PhoneBook)结构类型的变量.声明中的public表示对结构类型成员的访问权限
212 //访问结构成员可通过结构变量名加上访问符"."号,后跟成员的名称 赋值给成员如:p1.name= "tom";</FONT>< /FONT>
213 
214 6.枚举类型
215 枚举(enum)实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。下面的程序代码声明了一个代表星期的枚举类型的变量。
216    Enum WeekDay{
217    Sunday,Monday,Tuesday,Wednesday,Friday,Saturday
218    };
219    WeekDay day;
220    注意:枚举类型的变量在某一时刻只能取枚举中某一个元素的值。如,day这个表示“星期”的枚举的变量,它的值要么是Sunday,要么是Monday或其他的星期元素,但它在一个时刻只能代表具体的某一天,不能既是星期二,又是星期三。
221    Day=Tuseday;
222    按照系统默认,枚举中的每个元素都是整型(int),且第一个元素删去的值为0,它后面的每一个连续的元素的值按加1递增。在枚举中,也可以给元素直接赋值。下面的程序代码把星期一的值设为1,其后的元素的值分别为2,3……
223    enum WeekDay{
224    Sunday=1,Monday,Tuesday,Wednesday,Friday,Saturday
225    };
226    为枚举类型的元素所赋值的值的类型限于long、int、short和byte等整数类型。
227 
228 
229 二、引用类型
230 引用的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。
231 即引用类型存储实际数据的引用值的地址。 C#中的引用类型有四种: 类 代表 数组 接口 
232 
233 1. 类是面向对象编程的基本单位,是一种包含数据成员、函数成员和嵌套类型的数据结构.类和结构最主要的区别在于:类是引用类型,而结构是值类型.类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数成员,进而达到代码重用和设计重用的目的。下面介绍两个经常用到的类:
234    object类:它是所有其他类型的基类,C#中的所有类型都直接或是间接地从object类中继承。因此,对一个object的变量可以赋予任何类型的值。
235    Int x=25;
236    object obj1;
237    obj1=x;
238    object obj2='A';
239    对object类型的变量声明采用object关键字,这个关键字是在.NET平台中为我们提供的预定义的名字空间System中定义的,是类System.Object的别名。 
240 
241 
242 String类:专门用于对字符串的操作。同样,这个类也是在.NET平台中为我们提供的预定义的名字空间System中定义的,是类System.String的别名。
243    字符串在实际中应用非常的广泛,在类的定义中封装了许多内部的操作,我们只要简单地加以利用就可以了。可以用加号“+”合并两个字符串,采用下标从字符串中获取字符等。
244    String String1="Welcome";
245    string String2="Welcome"+"everyone"/// 连接字符
246    char c=String1[0]; /// 把变量String1的第一个字符赋给c
247   boolb=(String1==String2); /// 执行布而运算,两值相等赋值True ,不等赋值False
248 
249 
250 2.代表
251    在C#中取消了C和C++中的指针的这个概念。而代表实际上相当于是C#中的函数指针原型,与指针不同的是,代表在C#中是类型安全的.在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数。如我们可以声明一个指向int类型函数原型的代表:
252    delegate int MyDelegate();
253    如果我们声明了自己的一个代表,那么它就是对系统定义的类System.deldgate的一个扩展。
254 
255 
256 3.数组
257    在进行批量处理数据的时候,我们要用到数组。数组是一组类型相同的有序数据。数组按照数组名、数据元素的类型和维数来进行描述。C#中提供Ststem.Array类是所有数组类型的基类。
258    数组的声明格式为:
259    non-array-type[dim-separators] array-instance name;
260    比如我们声明一个整数数组:
261    int[]arr;
262    在定义数组时,可以预先指定数组元素的个数,这时在“[]”中定义数组的元素个数,它的个数可以通过数组名加圆点加“Length”获得。而在使用数组时,可以在“[]”中加入下标来取得对应的数组元素。C#中的数组元素的下标是从0开始的,以后递增。
263    在C#中数组可以是一维的也可以是多维的,同样也支持矩阵和参差不齐的数组。其中一维数组最为普遍,用得也最多。
264    Class Tese
265    {
266    static void Main(){ //可动态生成数组的长度
267    string[] a1; //一维数组string
268    string[] a2; //二维数组string
269    string[] a3; //三维数组string
270    }
271    } 
272 
273 4.接口
274    接口定义了一个协议(conrtact)。一个类或结构要实现接口就必须坚持这种协议。接口可以包括方法、属性、索引和事件作为成员。下面的程序代码说明了一个接口,它包含一个索引、一个事件E、一个方法F和一个属性P。
275    Interface Iexampie
276    {
277    string thisint index]{getset;}\
278    event EventHandler E;
279    void F(int value);
280    string P{getset;}
281    }
282 
283 
284 三、变量与常量
285 Variable //使用变量的一条重要的原则是:变量必须先定义后使用
286 变量的类型
287    在C#中,我们把变量分为七种:静态变量、非静态变量、局部变量、数组元素、值参数、引用参数和输出参数等。
288    静态变量:带有“static”修饰符声明的变量称为静态变量。一旦静态变量所属的类被装载,该类程序结束后变量的值被采放。静态变量就是该变量类型的默认值。静态变量最好是在定义时便赋值。如static a =10;
289    非静态变量:不带有“static”修饰符声明的变量称其为实例变量。如int a;类中的非静态变量,一旦一个类的新的实例被创建,直到该实例不再被应用从而所在空间被释放为止,该非静态变量将一直存在。同样鉴于定义赋值检查,一个类的非静态变量也应该是在初始化的时候赋值。
290    数组元素:数组元素也是变量的一种,该变量随该数组实例的存在而存在。每一个数组元素的初始值是该数组元素类型的默认值。同样地,鉴于定义赋值检查,数组元素最好是在初始化的时候被赋值。
291    局部变量:局部变量是指在一个独立的程序块中,一个for语句、switch语句或者using语句中声明的变量,它只在该范围内有效。当程序运行到这个范围内时,该变量即开始生效,程序离开时变量失效。与其他几种变量类型不同的是,局部变量不会自动被初始化,所以也就是没有默认值。在进行赋值检查时,局部变量被认为没有被赋值。
292    在局部变量的有效范围内,在变量的定义以前就使用是不合法的。如下面的代码:
293    forint I=0;I<10;I++){
294    int num=a; //这是非法的,因为局部变量a还没有被定义
295    int a;
296    int b=a;
297    }
298    有关值参数、引用参数和输出参数在这里我们不作讨论,有兴趣的读者可以参看相关的书藉。 
299 
300 常量声明的格式如下:
301    attributes constant-modifiers const type constant-declarators;
302    其中:常量修饰符constant-modifiers可以是:newpublicprotectedinternalprivate
303    常量的类型type必须是下面中的一种:
304    sbyle、byteshortushortintuintulongcharfloatdoubledecimalbool、string或是引用类型(reference-type)。
305    常量表达式constant-declarators表示常量的名字。
306    如:public const double X=1.0,Y=2.0,Z=3.0;
307 
308 四、表达式
309 1.操作符的分类

抱歉!评论已关闭.