实例构造器和类(引用类型)
构造器:
初始化对象。创建引用类型的对象时,首先为实例的数据字段分配内存,然后进行初始化。
构造引用类型的对象的时候,在调用类的构造函数的时候,为对象的内存总是先归零,没有被构造器显示重写的都会办证获得0或者null值
**我们可以知道由于是本类的构造函数,当然不可以被其他类继承(类名都不一样),所以会禁止使用以下修饰符:virtual,new,override,sealed和abstract
**当有一些已经初始化的字段,和几个重载的构造函数,可以考虑创建单个构造器来初始化字段,然后通过调用this关键字调用该构造器可以避免每次调用构造器的时候对字段的初始化
` //不要对这些字段初始化,专门建造一个构造器
private Int32 m_x;
private String m_s;
private Double m_d;
//这个构造器会将所有的字段都初始化,然后通过this别的构造器来调用它
public program()
{
m_x = 5;
m_s = “YX”;
m_d = 2.2;
}
//该构造器将所有的字段都设为初始值,然后修改m_x
public program(Int32 x) : this()
{
m_x = x;
}`
值类型构造器和引用类型构造器
CLR总是允许创建值类型的实例,。所以值类型其实不需要创建构造器。C#不允许值类型定义无参的构造器
类构造器
类型构造器可以用于接口(C#不允许这样做),引用类型,值类型。实例构造器用来设置一个类型某个实例的初始化状态,类型构造器用来设置一个类型的初始化状态。默认情况下,类型没有定义类型构造器。
可以发现一个特点是:无参,static标记,而且可访问性都是private,但是不能显示指定为private。
拓展方法
意义:将静态方法添加其他的函数功能,Only Need 在第一个参数面前添加this关键字
`public static class Extend
{
public static bool IsNullOrEmpty(this object i)
{
if (i == null) return true;
if (i.GetType() == typeof(string))
{
string temp = (string)i;
return temp.IsNullOrEmpty();
}
else return false;
}
public static Guid ToGuid(this string i)
{
Guid id;
if (!Guid.TryParse(i, out id))
{
throw new Exception(i + " can not be converted to Guid");
}
return id;
}
}`
public class TestExtend
{
public void Test()
{
string i = "this a world for me";
Console.Write(i.ToGuid());
try
{
Guid guid = i.ToGuid();
Console.Write(guid.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}