1. #region 后面可以写代码注释
#endregion
可以把其中的代码折叠-打开
2. 控制台程序输出的时候解决一闪而过的问题。
Console.WriteLine("aaa");
Console.ReadKey();//屏幕不会一闪而过
3. ref应用
int n1=10,n2=20;
swap(n1,n2);//值传递
swap(ref n1,ref n2);//引用传递
4.可变参数 params
类似 java中为GetMax(T... t)类型为T的数组
public static int GetMax(params int[] pms)
{
}
5. c#中的split参数
#region 将字符串" hello world ,你 好 世界 ! "两端空格去掉,并且将其中的所有其他空格都替换成一个空格,输出结果为:"hello world,你 好 世界 !"。
string msg =" hello world ,你 好 世界 ! ";
msg = msg.Trim();//这样表示去掉两边空格
string[] words = msg.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);//去掉为空字符串的项
msg = string.Join(" ", words);//将返回的字符数组用空字符串连接起来
Console.WriteLine("==========" + msg + "===================");
Console.ReadKey();
#endregion
6.c#编译生成的exe文件不是真正意义上的exe文件,。.net reflector可以反编译出exe中的源码,仅限c#生成的exe,其他语言生成的exe反编译不了。原因就在此。
如果不使用vs开发软件,仅使用记事本,则需要把c#代码,编译成exe文件才可以。
步骤:编写一个.cs的文件 通过csc编译器(csc.exe 在.net framework安装目录下)将.cs文件编译成“伪exe”→“程序集”.(微软中间语言IL). “运行”exe文件(将“伪exe”文件通过“即时编译”[jit→just in time])→机器码
7. 自动属性
1. public string Name{get;set;} 自动属性,编译器会自动生成对应的字段。可以反编译看出。
2. private string _name;
public string Name
{
get
{
return _name;
}
set
{
this._name=value;//会自动生成一个方法Set_Name(string value),传入的参数就是value,所以这里可以直接使用value。
}
}
方法1,2功能一样,最好使用2的方法。因为方法一字段名是编译器随机生成的,可能会重复,发生错误。退吗使用方法2.
8.添加引用与引用命名空间区别
同一个项目中的不同命名空间中的类引用,要导入命名空间
不同项目中,要访问其他项目的类,要添加引用,之后再导入该类所在的命名空间。
9.里氏替换原则:需要父类的时候,可以给一个子类对象是可以的。
父类引用指向子类对象,就是里氏替换原则,也就是多态。
10.不打断点调试
光标放到某一行,然后按 ctrl+F10,就启动调试,运行到改行,程序停住。
11.当一个子类继承父类以后,该子类中的所有构造函数在默认情况下,在自己被调用前,都会调用父类中无参的构造函数,如果父类没有无参的构造函数,则会报错。
解决方法:1.父类增加无参的构造函数。
2. 子类构造函数调用时,手动的调用父类有参的构造函数。如下所示:
public Student(string name,int age,int heigth,string sid):base(name,age,heigth)//与java中的super()类似
{
this.Sid=sid;
}
12.c#中有五种访问修饰符
1.private 本类内部访问
2.protected 本类及子类可以访问
3.internal 当前程序集内部都可以访问(编译成同一个程序集dll或exe内的所有类都可以访问),注意与命名空间namespace没关系,可以不同的namespace,但必须编译成一个共同的程序集。
4.protected internal 当前程序集内部或者是该程序集内部某个类的子类可以访问,该子类可以在其他程序集中
5.public 任何地方都可以访问
注意:累成员变量当不写修饰符时,默认是private。
与java不同,java是四种访问修饰符,private,protected,public,无(默认)
13.