结构体(struct 定义)
struct person
{
int name;
int age;
public int getage()
{
return age;
}
}
类(class定义)
class Person
{
private string name;
private int age;
public void SayHi()
{
Console.WriteLine("Hello,My Name is "+this.name+",Age is"+this.age);
}
}
大致比较
从语法上来看.它们的语法都大同小异,类里面的成员几乎都可以定义在结构体中,但是析构函数除外.
不同点
-
a.在结构体中可以声明字段,但是声明字段的时候是不能给初始值的.所以当我们试图这样写代码的时候,C#编译器在将源代码编译成程序集的是会提示语法错误.
-
即结构体在进行组成员定义时不允许赋初值
但类定义成员属性时是可以赋值的
== 但是注意!!==
这样是允许的class Person { private string name = "jack";//语法不报错 但实际的执行方式如下 }
class Person { private string name ; public person() { name="jack"; } }
这样是不允许的
class Person { private string name; name="jack"; }
-
构造函数
C#编译器在编译的时候,如果我们声明字段的时候为字段赋值,那么为字段赋值的代码C#编译器在编译的时候会将赋值的代码放到构造函数中去,其实严格意义上来说,类的字段也是不能有初始值的.只不过微软在背后帮我们做了点事情,我们不知道而已.
所以,不管在类和结构中,执行代码一定要写在方法中.不能直接写在结构或者类的下面.因为当执行代码写在方法中了,那么这些执行代码的执行时机才可以确定,就是这个方法被调用的时候了.
从上面的内容,我们可以看出.其实从本质上来说,类和结构的字段都是不能有初始值的.只不过微软在语法上允许我们在定义类的字段的时候为其赋值.但是背后微软其实是把赋值的执行代码放到构造函数中去执行的. 而结构体微软却不帮我们这样做.
结构体中同样可以定义构造函数,如下: