1、值传参与引用传参的区别

传值
  是把实参的值赋值给行参   
  那么对行参的修改,不会影响实参的值

 

 

结果:

10

100

传引用   
  真正的以地址的方式传递参数   
  传递以后,行参和实参都是同一个对象,只是他们名字不同而已   
  对行参的修改将影响实参的值

  1. using System;   
  2.   class Element   
  3.   {   
  4.       public int Number=10;   
  5.   }   
  6.      
  7.   class Test   
  8.   {   
  9.       static void Change(Element s)   
  10.       {   
  11.         Element r=new Element();   
  12.           r.Number=100;   
  13.           s=r;   
  14.       }   
  15.       static void Main()   
  16.       {   
  17.           Element e=new Element();   
  18.      
  19.           Console.WriteLine(e.Number);   
  20.           Change(e);   
  21.           Console.WriteLine(e.Number);   
  22.       }   
  23.   }   
  24.  
  25.  

结果:

10

10

从函数调用的角度理解:

传值:   
  函数参数压栈的是参数的副本。   
  任何的修改是在副本上作用,没有作用在原来的变量上。

 传引用:   
  压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是对他指向的变量的操作。

2、object的四个虚方法 Equals,GetHashCode,ToString,Finalize

3、lock 关键字可将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁

4、struct和Class的区别

1)、class 是引用类型,structs是值类型
2)、当你实例一个class,它将创建在堆上。而你实例一个struct,它将创建在栈上 3)、你使用的是一个对class实例的引用。而你使用的不是对一个struct的引用

4)、当我们将class作为参数传给一个方法,我们传递的是一个引用。struct传递的是值而非引用。

5)、structs 不可以有初始化器,class可以有初始化器

6)、Classes 可以有明显的无参数构造器,但是Struct不可以
7)、 类使用前必须new关键字实例化,Struct不需要
8)、class支持继承和多态,Struct不支持

9)、Class比较适合大的和复杂的数据,Struct适用于作为经常使用的一些数据组合成的新类型

5、for和foreach的区别
1)、foreach可以遍历枚举

6、公共语言运行库CLR:在CLR的控制下运行的代码常常称为托管代码

       (1)   把源代码编译为Microsoft中间语言(IL)。 
       (2)   CLR把IL编译为平台专用的代码。
7、基础类型的字节长度

1)、

8、构造与非构造的区别:非构造必须有返回值

9、静态构造与非静态的构造区别

静态构造函数在运行库加载类时执行,静态构造函数可以用于静态类,也可用于非静态类;静态构造函数无访问修饰符、无参数,只有一个 static 标志;静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次;非静态需实例化的时候调用。

10、子类是否可以访问基类的private或project属性和成员方法

11、构造气垫

12、enum 、delegate

13、base 、louder

14、MVP / MVC

 

using System; 
class Element
{
    public int Number=10;
}
class Test
{
    static void Change(Element s)
    {
        s.Number=100;
    }
    static void Main()
    {
        Element e=new Element();
        Console.WriteLine(e.Number);
        Change(e);
        Console.WriteLine(e.Number);
    }
}