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,那么死锁会发生)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值