Struct, Class, Abstruct Class, Interface的区别

来源:互联网 发布:unity3d连接数据库 编辑:程序博客网 时间:2024/04/29 07:53

Struct vs Class

相同点:

1)  它们都是创建对象的模板,用以抽象某类具有统统特征的对象;他们都包含数据和方法;

2)  它们在使用上没有太大的区别,除了关键字classstruct不同;

不同点:

1)  Struct是值类型,它在内存中的存储方式是存储于堆(heap)上

2)  Class是引用类型,它在内存中的存储方式是存储于栈(stack)上

使用实例:

//如下语句定义一个struct,struct是封闭的,所以它不能作为其他结构或者类的基,同时,它也不能基于其他类或者结构

public struct StudentS {

    public int age;

    public string name;

    //重要:struct不能含有默认构造函数,如下语句报错

    public StudentS() {}

    //但是可以定义含有参数的构造函数

    public StudentS(int age, string name) {

        this.age = age;

        this.name = name; }}

 

//如下语句定义一个class

public class StudentC {

    public int age;

    public string name; }

 

public class ClassMain {

    public static void Main() {

        //如下语句声明这个struct

        StudentS xiaoMing;

        //age赋值,因为struct类型(值类型),所以一旦被声明,就被分配了内存

        xiaoMing.age = 20;

        //但是,如果不初始化就使用对象的值,则会报错:use of unassigned field

        Console.WriteLine(xiaoMing.name);

        //应该赋值:

        xiaoMing.name = "XiaoMing";

        Console.WriteLine(xiaoMing.name);

        //或者使用new显式初始化:

        xiaoMing = new StudentS();

        Console.WriteLine(xiaoMing.name);

        //如下语句声明这个class

        StudentC xiaoFang;

        //如下语句初始化这个class

        //重要!对于class来说,一定要使用new来进行显式的初始化,如不显式初始化则会报错

        xiaoFang = new StudentC();

        xiaoFang.age = 20;

    }

}

Class vs abstract Class:

相同点:

1)  都可以含有成员变量

2)  成员函数都允许有函数体

3)  都不能多重继承或被多重继承

不同点:

1)  class能被实例化,abstract class不能被实例化

2)  class不能含有抽象方法,abstract

abstract Class vs Interface:

相同点:

1)  都不能被初始化;

2)  都支持抽象方法;

不同点:

1)  abstract class的成员函数允许有函数体,interface不能

2)  abstract class允许有成员变量,interface不能(interface只能含有事件,委托,函数,属性,索引器);

3)  abstract class的方法允许含有可见性修饰符,interface不能(默认为public

4)  abstract class不能被多重继承,interface可以被多重继承(实现)

5) abstract class 可以拥有构造函数/静态构造函数,interface不可以