写点什么

C#入门系列 (十七) -- 类和对象

作者:陈言必行
  • 2022 年 6 月 17 日
  • 本文字数:1741 字

    阅读完需:约 6 分钟

对象的定义和创建

  • 定义类对象的方法为:


类名 对象名;
复制代码


类是引用类型的,当定义了对象之后,系统会为数据引用分配存储空间,但是用来保存对象的实际数据的空间并没有分配。


  • 对象的创建


创建对象时需要使用 new 运算符。new 运算符可以为任意指定类类型的实例分配并初始化内存。


创建对象的语法形式如下:对象名 = new 类名();


  • 代码示例,对象的定义和创建:


class Program{    static void Main(string[] args)    {        //对象的定义和创建        Test t = new Test();                //或者 先定义        Test t1;        // 使用时创建        t1 = new Test();    }}
class Test{ }
复制代码


行对象的创建时,需要注意:


  1. new 运算符后为要创建的对象所属类的类名

  2. 类名后的圆括号不能省略

  3. 可以将对象的定义和创建合并在一起



对象的初始化

C#中实现对象初始化的方式有两种:


  • 借助构造函数或使用

  • 对象初始化列表。

1. 借助构造函数或使用

new 运算表达式的圆括号中所带参数并不是任意的,圆括号中是否支持参数、可以携带几个参数是由对象所属类的构造函数形式决定的。


C#的类支持两种构造函数:实例构造函数和静态构造函数


实例构造函数是实现初始化类实例所需操作的成员。


静态构造函数是一种用于在第一次加载类本身时实现其初始化所需操作的成员。


C#类的静态构造函数初始化类层次的项目。通常,静态构造函数初始化类的静态字段。


类层次的项目初始化必须在任何静态成员被引用之前,同时也必须在该类的所有对象创建之前。



2. 实例构造函数

实例构造函数是一个特殊的方法,它在创建类的每个新对象时执行,用以初始化对象的状态。


实例构造函数应该声明为 public。


下面是实例构造函数的一般定义形式:


// 无参构造public 类名(){    函数体}// 带参构造public 类名(参数列表){    函数体}
复制代码


定义实例构造函数时需注意:


  • 实例构造函数可以带有参数,也可以不带参数,

  • 实例构造函数的参数设置决定了对象创建时 new 运算表达式中圆括号中的参数格式;

  • 实例构造函数可以重载。


其他说明:


  • 当类的声明中没有显式提供实例构造函数时,编译器会提供一个隐式的默认构造函数。

  • 默认构造函数不带参数,并且方法体为空。

  • 调用默认构造函数实现对象创建时,new 运算表达式后的圆括号内不能带有参数。



3. 静态构造

静态构造函数:


  • C#类的静态构造函数初始化类层次的项目。

  • 通常,静态构造函数初始化类的静态字段。

  • 类层次的项目初始化必须在任何静态成员被引用之前,同时也必须在该类的所有对象创建之前。


使用静态构造函数时,需注意:


  • 静态构造函数只有一个,不能重载,并且不能带参数;

  • 静态构造函数不能有访问修饰符,它由系统自动调用;

  • 类的静态构造函数和实例构造函数可以共存;

  • 静态构造函数不能访问类的实例成员。



代码示例

class Program{    static void Main(string[] args)    {        Test t = new Test();        // 输出: 0,0,1        Console.WriteLine(t.X + "," + t.Y + "," + Test.Z)
Test t1 = new Test(1, 2); // 输出: 1,2,2 Console.WriteLine(t1.X + "," + t1.Y + "," + Test. Test t2 = new Test(3, 4); // 输出: 3,4,3 Console.WriteLine(t2.X + "," + t2.Y + "," + Test.
Console.ReadLine(); }}
class Test{ public int X = 0; public int Y = 0;
public static int Z = 0;
// 无参构造 public Test() { Z++; }
// 带参构造 public Test(int X, int Y) { this.X = X; this.Y = Y; Z++; }
// 静态构造 -- 初始化Z值 static Test() { Z = 0; }}
复制代码



对象的引用

对象成员的引用形式为:


对象名.实例成员名// 或者对象名.实例成员名(实参列表)
复制代码


对象的运算同一类的两个对象支持赋值、相等与不相等运算。如下所示:


Test t = new Test();Test t1 = new Test();
// 输出:falseConsole.WriteLine(t == t1);// 对象的赋值操作t = t1;// 输出:true --> 此时t,t1表示为同一对象Console.WriteLine(t == t1);
复制代码


对象之间除了可以进行比较,赋值操作之外。还可以至此 is 和 as 运算符,is 和 as 运算符更多的应用于基类和派生类之间进行类型转换,详细说明在继承处讲解。

发布于: 刚刚阅读数: 3
用户头像

陈言必行

关注

公号:开发同学留步 2019.03.12 加入

我是一个从事Unity游戏开发攻城狮,6年开发经验,助你日常不加班。

评论

发布
暂无评论
C#入门系列(十七) -- 类和对象_C#_陈言必行_InfoQ写作社区