问题一:
最近看书,看到这样的实例化:object a As new object();     这样的实例化和object a = new object();有什么区别?我在Visual Studio 2005(.NET 2.0)中试着写前面那种方法,发现编译通不过,而我看的那本书是.NET 3.5的,是不是要在3.5种才能用这个方法?问题二:
我在Visual Studio的帮助中寻找As的说明,结果只找到as这个关键字,并得到下面这个例子class MainClass
{
    static void Main()
    {
        object[] objArray = new object[6];
        ……………        string s = objArray[i] as string;
        ……………
    }
}一般像例子里面的那种情况,我都是这样写的string s = objArray[i].Tostring();    这种写法和as那种有什么区别?就像判断相等的情况,"=="和Equals()是有区别的,所以我想,用as和Tostring()也是有区别的,希望能有人帮解答。问题三:
我正在做一个关于多线程的练习,里面遇到线程安全并发问题,要使用lock,在使用过程中,遇到一些不解。
在书中,例子一般都这样写://主方法class ThreadTest
{
     static void Main(string[] args)
     {
         Printer p = new Printer();         Thread createServer = new Thread(new ThreadStart(p.PrintNumbers)); //开辟线程
         createServer.IsBackground = true; 
         createServer.Start();
     }
}//Printer类class Printer
{
    public void PrintNumbers()
    {
        private object threadLock = new object(); //线程锁
        lock(threadLock)
        {
            ……
        }
    }
}
从上面代码可以看得出,开线程是是给Printer类里面的PrintNumbers()方法开辟一个新的线程,Printer里只有一个方法那还好,但是万一他的方法很多的时候呢?并且我要产生多个实例,并且各个实例之间也要保持安全并发呢?于是我就改成这样://主方法class ThreadTest
{
     static void Main(string[] args)
     {
         Thread createServer = new Thread(new ThreadStart(WaitForConnect)); //开辟线程
         createServer.IsBackground = true; 
         createServer.Start();
     }     private void WaitForConnect() //执行Printer实例里的所有方法
     {
          Printer p = new Printer();
          p.PrintNumbers();
          p.PrintString();          …………
     }
}//Printer类class Printer
{
    private static object threadLock = new object(); //改成静态变量,共所有实例用
    public void PrintNumbers()
    {
        lock(threadLock)
        {
            ……
        }
    }    public void PrintString()
    {
        lock(threadLock)
        {
            ……
        }
    }    …………
}
我的思想是这样的:线程锁我做成静态的,这样的话,就能所有实例都能受到这个线程锁的控制了。开辟新线程时,不是原来的那样给实例方法开新线程,而是给实例开新线程,这样我就可以实例化多个类,并且这些实例都能安全并发。因为我没有客户端进行测试,所以只能主观臆断。希望高手能帮我解答,我这样做会有什么问题没有,不胜感激!

解决方案 »

  1.   

    可以看看这个
    http://www.cnblogs.com/anytao/archive/2007/04/07/must_net_01.html
      

  2.   

    可以看看这个
    http://www.cnblogs.com/anytao/archive/2007/04/07/must_net_01.html
      

  3.   

    问题一:反正2.0里不行
    问题二:as的规则如下:
    检查对象类型的兼容性,并返回结果,如果不兼容就返回null;
    不会抛出异常;
    如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常我想LZ应该可以理解区别了。问题三:方法很多的情况下会发生什么现象呢?
      

  4.   

    问题一:反正2.0里不行
    问题二:as的规则如下:
    检查对象类型的兼容性,并返回结果,如果不兼容就返回null;
    不会抛出异常;
    如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常我想LZ应该可以理解区别了。问题三:方法很多的情况下会发生什么现象呢?