Class Review

1. definition
class  TestClass
{
   
// methods, properties, fields, events, delegates
   
// nested classes, only nested class can use: protected and private
}

2. inherit
class  ClassA { }                                // 无继承
class  DerivedClass: Base Class { }       // 单一继承
class  InterClass: Int1, Int2 { }            // 接口继承
class  IDClass: BaseClass, Int { }          // 复合继承

3. Members
      Constructor
      Destructor
不能在结构中定义析构函数。只能对类使用析构函数; 一个类只能有一个析构函数; 无法继承或重载析构函数; 无法调用析构函数。它们是被自动调用的; 析构函数既没有修饰符,也没有参数
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。程序退出时也会调用析构函数。
可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致性能问题。
不应使用空析构函数。如果类包含析构函数,Finalize 队列中则会创建一个项。调用析构函数时,将调用垃圾回收器来处理该队列。如果析构函数为空,只会导致不必要的性能损失


class  Car
{
    
~ Car()   //  destructor
    {
        
//  cleanup statements
    }

    
// 该析构函数隐式地对对象的基类调用 Finalize。这样,前面的析构函数代码被隐式地转换为以下代码:
     protected   override   void  Finalize()
    {
        
try
        {
            
//  Cleanup statements
        }
        
finally
        {
            
base .Finalize();
        }
    }
}
      Constant
      Field
      Method
      Property
      Indexer      
class  SampleCollection < T >
{
    
private  T[] arr  =   new  T[ 100 ];
    
public  T  this [ int  i]
    {
        
get
        {
            
return  arr[i];
        }
        
set
        {
            arr[i] 
=  value;
        }
    }
}
      Operator
      Event
      Delegate
      Class
      Interface
      Struct

3. Generic Class
class  BaseNode { }
class  BaseNodeGeneric < T >  { }

//  concrete type
class  NodeConcrete < T >  : BaseNode { }

// closed constructed type
class  NodeClosed < T >  : BaseNodeGeneric < int >  { }

// open constructed type 
class  NodeOpen < T >  : BaseNodeGeneric < T >  { }
泛型类封装不是特定于具体数据类型的操作,最常用于集合。

// No error
class  Node1 : BaseNodeGeneric < int >  { }

// Generates an error
// class Node2 : BaseNodeGeneric<T> {}

// Generates an error
// class Node3 : T {}
非泛型类(换句话说,即具体类)可以从封闭式构造基类继承,但无法从开放式构造类或裸类型形参继承,因为在运行时客户端代码无法提供实例化基类所需的类型实参

class  BaseNodeMultiple < T, U >  { }

// No error
class  Node4 < T >  : BaseNodeMultiple < T,  int >  { }

// No error
class  Node5 < T, U >  : BaseNodeMultiple < T, U >  { }

// Generates an error
// class Node6<T> : BaseNodeMultiple<T, U> {}
从开放式构造类型继承的泛型类必须为任何未被继承类共享的基类类型参数提供类型变量

void  Swap < T > (List < T >  list1, List < T >  list2)
{
    
// code to swap items
}

void  Swap(List < int >  list1, List < int >  list2)
{
    
// code to swap items
}
开放式构造类型和封闭式构造类型可以用作方法参数

 

如果某个泛型类实现了接口,则可以将该类的所有实例强制转换为该接口。
泛型类是不变的。也就是说,如果输入参数指定 List<BaseClass>,则当您尝试提供 List<DerivedClass> 时,将会发生编译时错误。

详见:http://msdn.microsoft.com/zh-cn/library/0b0thckt.aspx

你可能感兴趣的:(Class)