生成动态链接库的命令:
csc /target:library MyClass.cs
编译时制定要关联的动态链接库:
csc /reference:MyClass.dll NewClass.cs
使用命名空间的好处:
1,同一个命名空间的代码可以分布在多个文件中。
2,命名空间具有可扩展性。
3,可以堆砌出层次式的类组织结构。
命名空间使用别名:
using A=P_namespace.C_namespace;
c#中方法参数的传递机制:
1,值参数
方法名称(参数类型 参数名称 [,参数类型 参数名称])
2,引用参数
方法名称(ref 参数类型 参数名称 [,参数类型 参数名称])
3,输出参数
方法名称(out 参数类型 参数名称 [,参数类型 参数名称])
引用传递和输出传递类似于C++的指针传递,会导致参数值的修改
区别在于:输出参数必须在函数内部对参数初始化,而引用参数则不允许在函数内部对参数初始化
对于引用类型(除了string)无论使用哪种方式都会导致参数值的修改,也就是说上述分类只对基本数据类型有效
对于string类型,尽管它是引用类型,但它是不可变的
可变参数:使用关键字params,且param是后必须紧跟数组类型参数
public int addAll(params int[] valuse)
字符:
c#中的字符使用Unicode编码,每一个字符时System.Char的实例
将数字打印成字符:Console.Write("/x41"); A的16进制编码是41
将数字打印成Unicode字符:Console.Write("/u4F60"); "你"的unicode编码是41
Console.Write(char(65)); A的10进制编码是65
Convert.ToChar(65); A的10进制编码是65 转化速度不如上面两种
Console.Write("{0,3}:{1,-3}",a,b); 0代表a 1代表b 3代表占3个空格 +代表右对齐
string.Format("{0:x},{1:x}",(int)'一',(int)'二'); 显示两个字的16进制编码 x表示16进制
Unicode中中文编码的范围是0x4e00~0x9fa5
类:
class A: Object //继承
{
public A:base() //调用基类的构造函数
{
}
}
calss A
{
int num=100;
string school="myschool";
public A(){}
public A(int i){this.num=i;}
public A(string s){this.school=s;}
public A(int i,string s){this.num=1;this.school=s;}
}
这样的代码通过 IL DASM查看后会发现 在每一个构造函数的开头都会重复出现对num,school赋值的情况
也即对变量直接赋值num=100会是代码出现大量的冗余。所以直接不赋值,或对代码进行修改:
calss A
{
int num;
string school;
public A(){num=100;school="myschool";}
public A(int i):this(){this.num=i;} //调用默认构造器
public A(string s):this(){this.school=s;}
public A(int i,string s):this(){this.num=1;this.school=s;}
}//其实很少人会写出这样的代码,只是稍微提醒一下而已
class B:A
{}
//B类默认会调用A的无参构造器
//当类没有构造器时,会自动为其生成一个无参数构造器
//可以用IL DASM来查看
public B(int i):base(i) //使用base类似于Java中的super
{}
类的静态构造器一般用于类的静态成员的初始化。静态构造器只执行一次。
静态构造器无参数,无访问修饰符,不能被调用。在类加载时类的静态构造器自动调用。
具体查看例子。
一个类只有一个析构函数。
析构函数不能被继承或重载。
析构函数不能加访问修饰符。
析构函数自动被调用。
class A
{
~A()
{
}
}
使用析构函数会导致程序性能的下降
释放模式:
需要释放资(非托管资源)源场景:
文件
网络连接
嵌套字
互斥体
…………
用接口来dispose IDisposable
interface IDisposable
{
void Dispose();
}
用接口来释放资源可以避免因使用析构函数而导致的性能的下降
dispose方法会阻止finalize方法的自动调用
对需要释放资源的调用,一般采用如下方式:
MyResource mr=new MyResource();
try
{
mr.doSomething();
}finally
{
mr.dispose();
}
当实现IDisposable接口后,try~finally代码块可简写成如下形式
using(MyResource mr=new MyResource())
{
mr.doSomething();
}
通过IL查看可以知道,using其实也生成了try~finally代码块并在finally中调用了dispose方法
访问修饰符:
sealed 不能被继承的类
partial 可以声明在不同文件中的同一个类
强制类型转换:
int a=1000;
long b=2000000;
try
{
a=checked(int(b));
}
check uncheck可以用来检查或者不检查类型转换时可能发出的了溢出
checked{} 对多条语句进行检查
Type代表一个类的类型
判断某个对象是否是某个类的实例用is 使用方法和Java中的isInstanceOf有形同的使用方法
as简化了is的if判定 并简化类型转换
CSharp简记
最新推荐文章于 2020-04-18 13:36:18 发布