C#结构和类的区别
1,类型
结构:值类型;存储在栈中
类:应用类型;存储在堆中
2,声明语法
结构:struct 类:class
相关示例:
//声明类 public class PersonClass { //字段、属性、方法、构造函数 //不赘述 } //声明结构 public struct PersonStruct { //字段、属性 private string _name; public string Name { get { return _name; } set { _name = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } private char _gender; public char Gender { get { return _gender; } set { _gender = value; } } public static void M1() { Console.WriteLine("我是结构中的静态方法"); } public void M2() { Console.WriteLine("我是结构的非静态方法"); } public PersonStruct(string name, int age, char gender) { //this.Name = name; //this.Age = age; //this.Gender = gender; this._name = name; this._age = age; this._gender = gender; } }
3,关于构造函数
在类中,
构造函数可以给字段赋值,也可给属性赋值;
构造函数可以重载
而在结构中.
构造函数必须给全部字段赋值,且只能给字段赋值;不能选择性的赋值;
4,默认构造函数
相同点:结构和类,默认都有一个无参的构造函数.
不同:
当类中新写一个构造函数,默认的无参构造函数,被干掉;若需要,需手动添加默认无参构造函数
在结构中新写的构造函数之后,默认的无参构造函数依然存在; 结构不能手动声明默认的构造函数
有且只有两个构造函数,一个默认无参的构造函数,一个全参数的构造函数
5,结构的new
只做了一件事情,调用结构的构造函数
6,继承和面向对象
结构不能继承于类,类也不能继承于结构
结构不具备面向对象的特征
而类才是面向对象的产物
7,调用对象
结构需创建对象,才能调用结构中的非静态方法