方法
来源:互联网 发布:美国网络mba课程 编辑:程序博客网 时间:2024/05/18 04:58
实例构造器(构造函数)和类(引用类型)
构造器是将实例初始化为良好状态的特殊方法。比如:创建引用类型的对象的时候,首先为对象会分配内存地址,/然后初始化对象的附加字段(类型对象指针和同步块索引)/,然后调用实例构造器来设置对象的初始化状态。
要注意的是
- 在调用构造函数之前,引用类型的变量的初始值总为0或为Null值
- 如果父类没有提供无参的构造函数,那么子类必须显示调用一个父类的构造函数
- `internal struct Point{
- public Int32 m_x,m_y;
- public Point(){
m_x=m_y = 5;
} - }`
那么如上,即使新建了一个类,两个Point字段中的m_x,m_y都是0,因为他们的构造函数没有被任何对象显示的调用过。
实例构造与值类型
值类型其实不需要定义构造器,C#编译器也根本就不会为值类型内联嵌入默认的无参构造器。
只有嵌套在引用类型的值类型才会被初始化为0或null,如果是基于栈的值类型,那么在读取之前,被要求强制初始化,否则报错。
由于C#不允许值类型定义无参构造函数,所以值类型同样不准内联参数化。(静态字段可以内联初始化,因为是在类型对象里面,而不是实例对象)
且值类型的任何构造函数在初始化的时候,必须对值类型的所有字段都赋值。
对于这么麻烦的设定,当然也有解决的办法:
public struct Troy {
public int a;
public int b;
public Troy(int i) {
this = new Troy();//先初始化所有的字段都为0或null
//初始化自己想玩的字段
a = i;
}
}
类型构造器
首先要了解到,类型构造器实际上就是构造CLR分配内存中的类型对象初始化时用的。
类型构造器是不允许有参数的,当然也就只能定义一个类型构造函数。
实际上类型构造器必须是私有的,甚至不允许显式写上private修饰符,这样做正是为了防止开发人员调用。它的调用总是由CLR负责的。
简单样例: class Program
{
static void Main(string[] args)
{
Troy obj = new Troy();
}
}
public class Troy
{
static Troy()
{
Console.WriteLine("我就问你6不6?");
Console.ReadKey();
}
}
类的构造函数中的代码只能访问类型的静态字段,所以类的构造函数的常规作用就是用来初始化这些静态字段。例如: internal sealed class SomeType{
等同于
private static Int32 s_x = 5;
}internal sealed class SomeType{
private static Int32 s_x;
static SomeType(){
s_x = 5;
操作符重载:当编译器看到有+这种操作符时,就会看几个操作数的类型中是否有定义了名为op_Addition这个函数(被编译后的真正的函数名),而且该方法参数兼容于操作数的类型。
所以操作符重载函数中,一定要有一个参数的类型与定于这个重载方法的类型相同: public class Troy {
public static int operator +(Troy a, Troy b) {
return 10;
}
}
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 方法
- 就“SQL入门经典”。。。
- 关于Android开发中部分系统功能不能正常调用问题
- Minimum Depth of Binary Tree
- 对listview adapter的getview方法的新认识viewholder
- Android系列之多线程用法与Service初步
- 方法
- 注册的时候 输入框类用户名 密码 邮箱的判定
- Gcd [Bzoj 2818]
- C++ Primer 面向对象编程 15.3 基类派生类相互转换 15.4. 构造函数和复制控制
- linux安装python2.7.11
- 关于onWindowFocusChanged
- 利用x64_dbg破解一个最简单的64位小程序
- 时区与时间
- window7 上安装 php扩展