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

C#笔记

2013年04月29日 ⁄ 综合 ⁄ 共 2086字 ⁄ 字号 评论关闭

var 可以使编译器自动确定一个合适的类型
例如 var x = 10; 则在编译时自动将x变量设为INT型。

如下函数
void optMethod(int first, double second = 0.0, string third = "Hello")
可以用此方法调用optMethod(first : 99, second : 123.45, third : "World");

格式化字符串举例
Console.WriteLine("Fee is {0}", fee);

如果要使用强制类型转换,使用如下的方式  A a = (A) b; 将可能导致抛出异常(如果无法转换),而如果使用as语句,则转换失败不会抛出异常,只赋值为Null,例如 A a = b as A;

每个群成员的访问属性都需要单独指定,否则便是默认的private。

每个C#程序需要一个Main函数,可以放在任何类中,如果两个类同时定义了Main函数,当然,会出错。要解决错误,需要修改编译选项,指定用某个类的Main函数。

Main函数接受的字符串数组参数中,第一个元素不包含应用程序的名称。

new创建的对象并不一定都在堆上(只有引用类型),如果是数值类型,则是在栈上。

引用类型必须使用new实例化。Myclass myClass;这句话只是一个声明,myClass并没有真正被实例化,必须使用Myclass myClass = new MyClass();

继承的声明 class B : A

在构造函数中调用另一个构造函数,可以使用this(...)的格式。要调用基类的构造函数,需要使用base(...)。

构造函数初始化表只能访问构造函数,而不能初始化成员。

readonly修饰的成员变量只能在构造函数中初始化

静态构造函数用来初始化静态只读成员变量。

internal修饰的访问权限是只在同一程序集内部可见。即同一DLL中。不可跨DLL访问。

使用sealed限定符修饰的类将不可以被作为基类使用。

ref与out关键字实现了C++中的引用,即void GetValue(ref int Val)、void GetValue(out int Val)与C++中的void GetValue(int& Val)等效,但需注意的是,ref所修饰的变量必须在调用函数之前初始化。另外,在调用函数时,也必须显式指出ref和out关键字,例如GetValue(ref K)和GetValue(out K)。

可变数目的方法参数函数声明为void Sum(params int[] p),这样便可以动态传入不同个数的int参数了。例如Sum(i, j, k)。

如果要在子类中覆盖父类的函数,需要在子类的函数声明前加new修饰符。否则编译器会警告。

要重载父类的虚函数,需要使用override修饰符修饰子类的函数,如果使用new而不使用override修饰子类的实现函数,则子类的函数将是实现覆盖的效果,而非重载。

C#中的特性为“属性”。它能很好地替代C++的类中对同一个变量的get与set方法,从而实现良好地封装性。

只编写属性的get方法即可把属性变为只读的。

要使用锯齿状数组,可以使用类似又下语法。int[][] ints; ints = new int[2][]; ints[0] = new int[3];

特性的使用中,可以使用定位参数+命名参数的形式,其中命名参数是特性的属性,具体解释请参照书籍。

每个特性类可以使用[AttributeUsage(AttributeTargets.All, AllowMultiple=true]类似的声明来修饰。它表示了这个特性的可支持类型及是否是多次特性。

特性可以理解为对类型和成员的注释信息,这种信息可以利用反射机制来进行获取,从而不必借
助向资源文件和常量中堵塞一些琐碎信息。

interface中的声明不能加访问限定符,默认所有的声明都是public的。

要检测某个类是否实现了某个接口,可以使用is表达式。

在实现一个接口时,如果对实现的函数不使用public修饰,则客户只能通过将子类转换为接口类型才能访问。

sizeof操作符只能对值型变量使用。

对引用型变量互相赋值将会导致引用传递,而不是值复制!

switch语句中,不支持“贯行”,即一个case子句执行完后没有break而继续执行下一个case子句,但是支持几个case使用同样的执行代码,即使用连续的case语法而没有各自单独的子句。

foreach (type in expression)

代表(delegate)可以使用加法成为一个被连续调用的新代表,也可以从组合代表中使用减法消去已有的代表。

using语句,定义一个范围,在范围结束时处理对象。
场景:
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
例如:

using (Class1 cls1
= new Class1(), cls2
= new Class1())
{
// the code using cls1, cls2


}

// call the Dispose on cls1 and cls2

 

抱歉!评论已关闭.