随便写写

来源:互联网 发布:mysql有哪些内置的表 编辑:程序博客网 时间:2024/04/28 07:29

 前段时间看了c#高级编程这本书(时间问题就走马观花看了一下下,如果以后有机会就看看,学习c#。呵呵),看的时候从中找到了几个问题的答案。

(一次机会有为boss问我的几个问题,自己很模糊的地方。也许这应该是早要清楚的。嘻嘻)

 

1. 如果系统资源没有了,系统会如何处理?

  有个垃圾收集器来做这件事  ---> 当托管堆满的时候   --->检查对存储在托管堆上的对象引用  ---> 没有引用的对象不能再从代码中访问  ---> 因为被删除啦。呵呵

 

2. struct 和 class的区别?

 (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;

 (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。

 (三)在内存中的存储方式 (P73)

         A. struct 是存储在堆栈(stack)上的值类型;

         B. class 是存储在堆(heap)上的引用类型。


3. heap 和stack (P37)

   A. 堆(heap) ---> 程序员分配,eg:new,malloc,string

   B. 栈(stack) ---> 系统分配,eg:int

 

4. 下面为书中的个人认为以后要回读的地方:

 

   A. c#开发人员注意,由于c#本身有一个string类型,所以不需要把字符串表现为char类型的数组。(P36)

 

   B. XML的编写及使用 (P60)

 

   C. 编程风格的重要规则。(P67)

 

C# 中 Struct 与 Class 的区别,以及两者的适用场合

1,class 是引用类型,structs是值类型
既然class是引用类型,class可以设为null。但是我们不能将struct设为null,因为它是值类型。
    
struct AStruct
{
   
int aField;
}
class  AClass
{
   
int aField;
}
class MainClass
{
public static void Main()
{
AClass b 
= null// No error.
AStruct s = null// Error [ Cannot convert null to 'AStruct' 

because it 
is a value type ].
}
}

2,
当你实例一个class,它将创建在堆上。而你实例一个struct,它将创建在栈上

3,你使用的是一个对class实例的引用。而你使用的不是对一个struct的引用。(而是直接使用它们)

4,当我们将class作为参数传给一个方法,我们传递的是一个引用。struct传递的是值而非引用。

5,structs 不可以有初始化器,class可以有初始化器。

class MyClass
{   
 
int myVar =10;  //  no syntax error.    public void MyFun( ) 
   {       //  statements    }
}
struct MyStruct
{    
int myVar = 10;  //  syntax error.   
 public void MyFun( )  
  {       
//  statements    }
}


6
Classes 可以有明显的无参数构造器,但是Struct不可以

class MyClass
{   
  
int myVar = 10
  
public MyClass( ) // no syntax error.  
 {    
// statements
 }
}
struct MyStruct
{  
  
int myVar; 
  
public MyStruct( ) // syntax error.
   {       
  
// statements  
   }
}

7 类使用前必须new关键字实例化,Struct不需要

MyClass aClassObj;     //  MyClass aClassObj=new MyClass(); is the correct format.aClassObj.
myVar=100;//NullReferenceException(because aClassObj does not contain a reference to an object of type myClass).    
MyStruct  aStructObj;
aStructObj.myVar
=100//  no exception.

8 class支持继承和多态,Struct不支持. 注意:但是Struct 可以鹤类一样实现接口
9 既然Struct不支持继承,其成员不能以protected 或Protected Internal 修饰
10 Class的构造器不需要初始化全部字段,Struct的构造器必须初始化所有字段
class MyClass    //No error( No matter whether the Field ' MyClass.myString ' is initialized or not ). 

 
int myInt;  
 
string myString;   
 
public MyClass( int aInt )
      {    myInt 
= aInt;    }
}
struct MyStruct    // Error ( Field ' MyStruct.myString ' must be fully assigned before it leaves the constructor ).

  
int myInt;  
  
string myString; 
  
public MyStruct( int aInt ) 
   {    
    myInt 
= aInt;  
   }
}
11 Class可以定义析构器但是Struct不可以
12 Class比较适合大的和复杂的数据,Struct适用于作为经常使用的一些数据组合成的新类型。

适用场合:Struct有性能优势,Class有面向对象的扩展优势。
用于底层数据存储的类型设计为Struct类型,将用于定义应用程序行为的类型设计为Class。如果对类型将来的应用情况不能确定,应该使用Class。

 

 

上面有写的不对或者朋友们有更深见解的,欢迎评论。

原创粉丝点击