C#面试笔试小贴士 1

ü   refout、与params
应该来说这三个关键在一般的编码过程中还是会不时涉及到的,所以不算什么“冷僻”的概念。有关三个参数修饰符的解释如下:
Refref关键字让一个值类型的输入参数按引用传递。实际上,对于引用类型的参数,是否使用ref关键字,差别微乎其微。有一个例外是String类型的参数,由于C#中的String对象是不可修改的,所以要想真正达到参数引用传递的效果,需要使用ref关键字。

Out:使用out关键字表示此函数参数为输出参数。Out关键字主要应该是用于实现函数的多个返回值,使用它修饰参数的唯一好处在于变量在传递给out类型参数前,不需要初始化。

Paramsparams关键字指明若干输入参数将被看作一个参数数组。Params关键字只能用于参数列表的最后一个参数,这也很好理解。实际上我个人认为三个参数修饰符中,params是比较有意义同时用处较大的。

 

ü   constreadonly
大多数人会注意到constreadonly的一个区别,使用const修饰的字段是“编译时常量”,使用readonly修饰的字段是“运行时常量”(实际上来说它并非真正意义上的常量),借助以下例子可以帮助理解:
Public const int ConstSample=1;
Public readonly DateTime RoSample=DateTime.Now;

除此之外,
constreadonly之间还有其它一些差别,包括:
*常量字段总是静态的(它不用并且不能显式声明为static),只读字段可以声明为静态的,但默认不是;
*常量字段必须在声明时初始化。只读字段可以在声明时初始化,也可以在构造函数中初始化,或者不初始化;
*常量字段只能是内建的值类型、字符串以及枚举值,只读字段没有这一项限制。

 

ü   静态构造函数
通常是一些外企在笔试时会问到关于静态构造函数的问题,老外的想法就是不一样。平心而论用到静态构造函数的地方不多,至少对我而言静态构造函数没派上什么用场。
对于笔试,有三点需要注意一下:
*静态构造函数不允许有访问修饰符;
*静态构造函数不允许被显式调用;
*静态构造函数在加载类时实调用一次,即在创建类的任何实例(在非静态构造函数前执行)和引用类的任何成量之前。

 

ü   多态
首先你最好能清楚说明多态的概念,也许你天天用,却不一定能表述明白。作为OO编程中的三大特性之一(另两个是封装、继承),可以说是OO编程的实质,它意味着可以有多个可互换使用的类,即使每个类以不同的方式实现相同的方法或属性。

C#包含两类的多态:
*编译时多态,通过方法的重载(overload)来实现,对同一方法名称,程序员只需给出不同的参数,编译时系统将确定具体调用哪个方法;
*运行时多态,通过方法的重写(override)来实现,当调用基类的虚方法(virtual)时,JIT负责确定实例的实际类型,例如下面的例子,JIT最终会确定实例的实际类型是普通人还是超人,并最终调用相应派生类中的方法:


class Program
{
    
static void Main(string[] args)
    {
        Sample1.M1(
new OrdinaryPeople("ZhangSan"));
        Sample1.M1(
new Superman("Hancock"));
        Console.Read();
    }
}

class Sample1
{
    
public static void M1(Person p)
    {
        p.Introdce();
    }
}

class Person
{
    
protected string mName;
    
public Person(string pName)
    {
        
this.mName = pName;
    }
    
public virtual void Introdce()
    {
    }
}

class OrdinaryPeople : Person
{
    
public OrdinaryPeople(string pName)
        : 
base(pName)

    {
    }

    
public override void Introdce()
    {
        Console.WriteLine(
"Hello,I am an ordinary person," + this.mName);
    }
}

class Superman : Person
{
    
public Superman(string pName)
        : 
base(pName)
    {
    }

    
public override void Introdce()
    {
        Console.WriteLine(
"Hi,I am a Superman," + this.mName);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值