查看文章 |
有这么几点不同: 1.struct 是值类型,class是对象类型 2.struct 不能被继承,class可以被继承 3.struct 默认的访问权限是public,而class默认的访问权限是private. 4.struct不能由程序员申明构造函数,即使是默认(不带参数)的构造函数,同样也不能有析构的处理部分。这是因为Struct的构造函数是由编译器自动生成的。并且Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。 5.struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对所有的字段进行Copy。而class则是在堆上分配一块内存然后再执行构造函数,struct的内存并不是在new的时候分配的,而是在定义的时候分配
有人问“为什么不能继承System.Guid 中NewGuid方法呢”,答案是很简单的,因为System.Guid 是结构而不是类。
public struct MyType![]() ![]() { public int MyInteger; }![]() public class Class1 : MyType![]() ![]() { }
这段代码将抛出编译错误内容为 "Class1: cannot inherit from sealed class MyType".
public struct MyType![]() ![]() { public int MyInteger; }![]() public struct Class1 : MyType![]() ![]() { }
编译错误如下: "Class1: type in interface list is not an interface".
//Copyright (C) 2000 Microsoft Corporation. All rights reserved.![]() // struct2.cs using System;![]() class TheClass![]() ![]() { public int x; }![]() struct TheStruct![]() ![]() { public int x; }![]() class TestClass![]() ![]() { public static void structtaker(TheStruct s)![]() { s.x = 5; } public static void classtaker(TheClass c)![]() { c.x = 5; } public static void Main()![]() { TheStruct a = new TheStruct(); TheClass b = new TheClass(); a.x = 1; b.x = 1; structtaker(a); classtaker(b); Console.WriteLine("a.x = {0}", a.x); Console.WriteLine("b.x = {0}", b.x); } }![]() ![]()
|




}
}