一、对象的定义和创建
定义类对象的方法为:
类名 对象名;
类是引用类型的,当定义了对象之后,系统会为数据引用分配存储空间,但是用来保存对象的实际数据的空间并没有分配。
对象的创建
创建对象时需要使用new运算符
。new
运算符可以为任意指定类类型的实例分配并初始化内存。
创建对象的语法形式如下: 对象名 = new类名();
代码示例,对象的定义和创建:
class Program
{
static void Main(string[] args)
{
//对象的定义和创建
Test t = new Test();
//或者 先定义
Test t1;
// 使用时创建
t1 = new Test();
}
}
class Test
{
}
行对象的创建时,需要注意:
- new运算符后为要创建的对象所属类的类名
- 类名后的圆括号不能省略
- 可以将对象的定义和创建合并在一起
二、、对象的初始化
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();
// 输出:false
Console.WriteLine(t == t1);
// 对象的赋值操作
t = t1;
// 输出:true --> 此时t,t1表示为同一对象
Console.WriteLine(t == t1);
对象之间除了可以进行比较,赋值操作之外。还可以至此is
和as
运算符,is
和as
运算符更多的应用于基类和派生类之间进行类型转换,详细说明在继承处讲解。
到此这篇关于关于C#
类和对象详情的文章就介绍到这了,更多相关C#
类和对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!