结构和类的区别
结构 | 类 | |
---|---|---|
类型 | 值类型 | 引用类型 |
继承 | 不能作为基类被继承 | 可以作父类被继承 |
构造函数 | 默认构造函数始终会被调用 | 如果自定义构造函数,默认的会被替换掉 |
析构函数 | 无析构函数 | 有默认析构函数 |
字段 | 不能在声明字段时直接给字段赋值 | 可以在声明时给字段赋值 |
静态构造函数 | 有一个 | 有一个 |
结构
1、不能显示定义默认无参的构造函数
2、在结构中不能在声明字段时直接赋值
在结构中想要给字段赋值有两种办法
方法1:在自定义有参构造函数时,传参,赋值
new有参构造,传参
方法2:通过new默认构造函数,创建一个实例
通过实例名.字段的方式赋值(补:在类外访问类成员时,必须为public修饰)
完整代码
`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace structDemo1
{
class Program
{
static void Main(string[] args)
{
// 结构的字段赋值方式有两种。1 - 系统会调用有参构造函数,(实例化时传参数)
Person2 xiaohua = new Person2("female", "王小花");
Console.WriteLine($"sex:{xiaohua.sex},name:{xiaohua.name}");
// 结构的字段赋值方式有两种。2-会调用默认无参构造函数,在实例化时赋值
Person2 zhangsan = new Person2();
zhangsan.name = "张三";
zhangsan.sex = "男";
Console.WriteLine("name={0},sex={1}",zhangsan.name,zhangsan.sex);
}
}
class Person
{
//解决方法2:在基类中创建一个默认无参构造函数
public Person()
{
}
public Person(int age, string name)
{
}
}
class Student : Person
{
public Student()
{
}
//解决方法1,在构建一个有参的构造函数(和基类构造函数签名一样)
public Student(int age1, string name1) : base(age1, name1)
{
}
}
struct Person2
{
//public Person2() //Error!结构中默认无参构造函数是系统默认隐式调用,而且,不能自己显式的写出来
// {
// }
public Person2(string sex1, string name1)
{
sex = sex1; // 结构的字段赋值方式有两种。1-在有参构造函数中赋值(实例化时传参数)
name = name1;
}
//public int age = 10; // Error! 结构中不能直接给字段赋值
//public int height = 165;
public string sex; // 结构的字段赋值方式有两种。
public string name;
}
}
`