返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

Struct, Class, Abstruct Class, Interface的区别与联系

时间:2010-10-28 17:03来源:知行网www.zhixing123.cn 编辑:麦田守望者

Struct vs Class:
相同点:

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

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

不同点:

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不可以

 

------分隔线----------------------------
标签(Tag):C# C#实例教程 c#基础教程 C#源码
------分隔线----------------------------
推荐内容
猜你感兴趣