C#基礎複習 三

 

看代碼,然後回答問題(難度係數65%):  

enum   Fruit   {   Apple,   Pear,   Orange   };  

請問,Fruit.Apple.GetType().ToString()將得到什麼結果?而typeof(   Fruit   ).GetType().ToString()呢?  

    這道題目的前半部分是考對枚舉類型的理解的,枚舉的每一個選項都是該枚舉類型的實例,即Fruit.Apple的類型就是Fruit,所以GetType().ToString()就是Fruit。而後半部分是考對typeof的瞭解的,這裏是一個陷阱,看起來是在取Fruit的類型,但實際上typeof(   Fruit   )本身的結果就是一個Type類型的對象,Type類型的對象GetType會得到Type類型的Type對象,故而答案應該是System.Type

 

delegate是引用類型還是值類型?enumint[]string呢(難度係數40%)?

delegate引用類型,enum值類型,int[]引用類型,string引用類型。 struct也是值類型

 

 

 

class Class1  {  

       private string str = "Class1.str";  

       private int i = 0;  

       static void StringConvert(string str)  {  

           str = "string being converted.";  

       }  

       static void StringConvert(Class1 c)  {  

           c.str = "string being converted.";  

       }  

       static void Add(int i)  {  

           i++;  

       }  

       static void AddWithRef(ref int i)  {  

           i++;  

       }  

       static void Main()  {  

           int i1 = 10;  

           int i2 = 20;  

           string str = "str";  

           Class1 c = new Class1();  

           Add(i1);  //i1 = 10

           AddWithRef(ref i2); //i2 = 21 

           Add(c.i);  //c.1 =0

           StringConvert(str);  //   str = "st";      

           StringConvert(c);  // c.str = "string being converted."; 

           Console.WriteLine(i1);  

           Console.WriteLine(i2);  

           Console.WriteLine(c.i);  

           Console.WriteLine(str);  

           Console.WriteLine(c.str);  

       }   

    }  

 

    

注意:ref是有進有出,out是隻出不進。經典!!!

 

 

 

public abstract class A   

{  

        public A()   

       {  

            Console.WriteLine('A');  

        }  

        public virtual void Fun()   

       {  

            Console.WriteLine("A.Fun()");  

        }  

}  

 

public class B: A   

{  

        public B()  

       {  

            Console.WriteLine('B');  

        }  

 

        public new void Fun()   

       {  

            Console.WriteLine("B.Fun()");  

        }  

 

        public static void Main()   

       {  

           A a = new B();  

           a.Fun();  

        }  

}  

 

 

A

B

A.Fun()

 

 

 

public class A   

{  

        public virtual void Fun1(int i)  

       {  

            Console.WriteLine(i);  

        }  

 

        public void Fun2(A a)    

       {  

            a.Fun1(1);  

            Fun1(5);  

        }  

}  

 

 

public class B : A   

{  

        public override void Fun1(int i)     

       {  

            base.Fun1 (i + 1);  

        }  

 

        public static void Main()    

       {  

            B b = new B();  

            A a = new A();  

            a.Fun2(b);  

            b.Fun2(a);           

        }  

}  

2

5

1

6

 

 

根據線程安全的相關知識,分析以下代碼,當調用test方法時i>10時是否會引起死鎖?並簡要說明理由。(10)
public void test(int i)

lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現死鎖。但如果把int換做一個object,那麼死鎖會發生)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章