本文主要介绍了C#中struct与class的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1.最大的区别
struct类型定义的变量是值类型,class定义的变量是引用类型。因此struct类型定义的对象是分配在栈上面的,而class定义的对象是分配在堆上的。
2.struct成员无法被声明为protected。
举例:
struct Test1
{
protected readonly bool c;//会报错
}
3.struct是隐式的sealed类
因此struct不能被继承也无法继承其他,因此其成员也不能指定为 abstract、virtual (毕竟被密封了,无法实现虚函数跟抽象函数)。
但是struct可以实现接口。
interface i1
{
void fun();
}
struct Test1:i1
{
public void fun()
{
throw new System.NotImplementedException();
}
}
4.struct中无法重载默认构造函数
struct Test1
{
public int a ;
public Test1(int A) //但是可定义非默认构造函数
{
a = A;
}
public Test1()//对默认构造函数重载,将报错
{
a = 1;
}
}
5.关于对象的初始化
1)结构体中的变量是不能在结构体中直接赋初始值的,类的变量成员可以。
struct Test1
{
public int a =1;//不允许赋初值,因此是错的
public int b;//对的
}
class Test2
{
public int a=1;//对的
public int b;//对的,默认赋初值为0
}
2)当使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。(即不使用new也是真的开辟了一个存储该struct变量的空间)
3)但是如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。如果使用默认构造函数进行new,会对数据进行默认赋值(int为0,引用类型为Null)
struct Test1
{
public int a =1;
public string b =1;
}
void TestFun()
{
Test1 test1;
test1.a = 1,test1.b = "1234";//必须给a跟b都赋值了才能使用test1
Console.WriteLine(test1.a);
Test1 test2=new Test1();//test2.a=0,test2.b=Null
}
4)struct中的构造函数必须为所有数据成员赋初值。
struct Test1
{
public int a ;//不允许赋初值,因此是错的
public string b;
public Test1(int A) {
a = A;
b = "4534";//必须对所有数据成员赋初值,否则报错
}
}
6.结构体没有析构函数,也无法自己去给结构体定义一个析构函数
毕竟struct是值类型,用析构函数也没啥鸟用。
struct Test1
{
~Test1() { }//错误的做法,会报错
}
到此这篇关于C#中struct与class的区别详解的文章就介绍到这了,更多相关C# struct与class内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
本文标题为:C#中struct与class的区别详解
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- user32.dll 函数说明小结 2022-12-26
- c# 模拟线性回归的示例 2023-03-14
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- .NET CORE DI 依赖注入 2023-09-27
- 如何使用C# 捕获进程输出 2023-03-10
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Oracle中for循环的使用方法 2023-07-04
- Unity Shader实现模糊效果 2023-04-27
- Unity3D实现渐变颜色效果 2023-01-16