关于.net类的一些小细节

首先请阅读下面的代码:

public   abstract   class  AClass
    {
        
public  AClass()
        {
        }
        
public   abstract   void  Add();
        
public   void  SAdd()
        {
        }
    }
    
public   class  BClass:AClass
    {
        
public  BClass(): base ()
        {
            
this .Add();
        }
        
public   override   void  Add()
        {
        }
    }
    
class  CClass
    {
        
void  DoIt()
        {
            
new  BClass().Add();
            
new  BClass().SAdd();
        }
    }

 此段代码能正常编译执行。这告诉我们一个信息:抽象类是可以定义构造函数的,但只能由继承类来调用,这是我所不知道的。

第二段代码:

using  System;
interface  ITest
{
}
public   static   class  Class1 
{
}

class  Class2 
{
}
static   class  Class3 // :ITest
{
}
public   class  IsTest 
{
   
public   static   void  Test ( object  o) 
   {
      
// Class1 a;
      Class2 b;

      
if  (o  is  Class1) 
      {
         Console.WriteLine (
" o is Class1 " );
         
// a = (Class1)o;
         
//  do something with a
      }
      
      
else   if  (o  is  Class2) 
      {
         Console.WriteLine (
" o is Class2 " );
         
// b = (Class2)o;
         
//  do something with b
      }
      
      
else  
      {
         Console.WriteLine (
" o is neither Class1 nor Class2. " );
      }
   }
   
public   static   void  Main() 
   {
      
// Class1 c1;
      Class2 c2  =   new  Class2();
      
// Test (c1);
      Test (c2);
      Test (
" a string " );
    
// Console.WriteLine (Activator.CreateInstance(Type.GetType("Class3")));
   }
}

这是.net 2.0新增加的静态类的示例代码,它不允许实例化,只能从Object继承,不能被继承,不能实现任何接口,并且不能做类型比较,这一切都和sealed abstract合并在一起的特征类似,让我们看一下static类的MSIL代码:

. class   public   abstract  auto ansi  sealed  beforefieldinit Class1
      extends 
object
{
}

果然是这样的,但是你直接把一个类同时声明为sealed和abstract是不能编译通过的,会报“抽象类不能是密封的或静态的”的编译错误,说明编译器做了限制,但MSIL和CLR是支持的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值