.Net常见的一些区别

说明:这是面试过程中整理的,不全是我原创的,感谢原作者。

如果错误,请指正,不胜感激。。

 

一,Equals()和==的区别

1,值类型,对象的值相等,则都返回True

2,引用类型,==比较的是两个变量的值是否相等,或两个引用是不是指向同一个内存地址,对于string类型,比较的是值。

             equals()方法比较的是两个对象指向的内存空间的内容是否相同,也就是比较两个引用类型是否是同一个对象的引用。

object o1=s1;

object o2=s2;

o1==o2                  //True  另外默认情况下引用相等,==和Equals一样

o1.Equals(o2)           //True     同一个对象存储空间的内容相等

 

ClassA a=new ClassA("CC");

ClassA b=new ClassA("CC");

a==b                        //False    两个不同的对象,内存地址不同

a.Equals(b)                //False    对不同对象的引用

 

ClassA a=new ClassA("CC");

ClassA b=a;

a==b                        //True    b=a,赋值操作,所以内存指向同一个地址

a.Equals(b)                //true    同一个对象的引用

 

二,const和readonly的区别

1,readonly和const都是用来标示常量的标示符

2,const必须在声明的同时赋值

public const int MaxValue=10   //正确

public const int MaxValue      //错误

   readonly可以再初始化(声明或构造函数)的过程中赋值,其他地方不能进行赋值,否则会编译报错

public class Class1

{

public readonly int a=10   //正确

public const int b

public Class1

{

b=10;                

}

protected void Load()

{

b=23     //正确

}

}

3,const要求编译时计算出确定的值,不能用变量初始化,readonly可以用某些变量初始化,在运行时确定值

4,const默认是静态的,readonly设置成静态的必须声明

5,object Array(数组) strut(结构)不能被声明为const

 

三,private,protected,public,internal的区别

private,是私有的,只能在类内部调用,子类不能继承private的属性和方法

protected,自己和自己的子类可以调用

public,对任何类成员完全开放,无限制

internal,同一个引用程序集内部,不是解决方案

 

四,sealed,new,virtual,abstract,override

sealed,不能继承,不能重写,当应用于方法和属性时,sealed必须和override一起使用

new,现实隐藏基类的成员,在子类调用是new新定义出来的,不是基类的方法

virtual,虚成员,可以由子类中的方法重写更改,不能将virtual和static,abstract,override一起使用

abstract,抽象,可以继承,只能在抽象类中使用抽象方法,不能被实例化,不提供实际实现,没有方法体

override,重写,重写基类方法必须是抽象的,虚拟的,重写的,

 

五,Server.Transfer()和Response.Redirect区别

1,前者是在服务器端跳转,浏览器地址不变,后者是在客户端跳转,地址栏变化,前者性能比后者好

2,前者只能在同一服务器的同一站点运行,后者可以定向到不同的服务器

3,在网站内部尽量使用Server.Transfer(),定向外面是用Response.Redirect

 

六,get和post的区别

1,get提交表单时值和表单一一对应,在URL显现出来,post不会显现出来。

2,get使用Rquest.QuerString[],post使用Request.From[];

3,get最大为2k,post理论上不受限制,get安全性比post低

 

七,ref和out:

ref与out是很特殊的两个关键字。使用它们,可以使参数按照引用来传递。

ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

区别:

out 参数在进入方法(函数)时后清空自己,使自己变成一个干净的参数,也因为这个原因必须在方法返回之前或再使用out参数前为 out 参数赋值(只有地址没有值的参数是不能被.net接受的);

ref参数是不需要在被调用方法使用前先赋值的,甚至也可以被调用方法中不改变ref参数的 值,这都不会引起编译错误。

ref参数在使用前必需初始化,而out不需要。

out参数只进不出,ref参数有进有出。

用法上概括一下就是:out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

原文地址:https://www.cnblogs.com/softmax/p/2823222.html