1、请编程遍历页面上所有TextBox控件并给它赋值为string.Empty

foreach (System.Windows.Forms.Control control in this.Controls)
{
    if (control is System.Windows.Forms.TextBox)
    {
        System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control;
        tb.Text = String.Empty;
    }
}

能用foreach遍历访问的对象需要实现 IEnumerable 接口或声明 GetEnumerator 方法的类型。

JS方法遍历:

 function BianLi()
 {
        var t=document.getElementsByTagName("input");
        for(var i=0;i<t.length && t[i];++i)
        {
            if(t[i].type=="text")
            {
                t[i].value="";
            }
        }
}

3、值类型,引用类型;

(1)、值类型:

      a.值类型变量包含赋予的数据,如:当声明(int)整型变量并赋值时,该变量直接包含赋予的值。将一个值类型变量赋予另一个值类型变量时,则是建立该变量的副本。

int num1,num2;

num1=5;num2=num1;=>num1=5,num2=5;

num2=3;        =>num1=5,num2=3;

  b.所有的值类型在声明的时候都有默认值。如:

Boolean shang; 默认值为false;

int age;默认值为0;

可以使用default关键字获取值类型的默认值:

object x;

x=default(bool); x=false;

x=default(int); x=0;

  c.如果没有明确地初始化变量,C#就禁止使用该变量。为了使用该变量,需要使用某个值对该变量进行初始化。如:

Boolean shang;

Console.WriteLine(shang);  报错

Boolean shang=false;

Console.WriteLine(shang);  OK

  d..NET Framework 带有一组预先定义的C#和.NET 值类型:bool,byte,sbyte,char,decimal,double,float,int,uint,long,ulong,short,ushort;

(2)、引用类型

对于引用类型,变量存储数据的引用而非实际数据,C#支持两种预定义的引用类型:Object和string;

数组是引用类型,但是数组中的元素可以是任意类型的。

(3)、值类型和引用类型的区别:

  a.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

  b.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。

  c.值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。

  d.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。 

4、装箱,拆箱

装箱:从值类型转换为引用类型;

拆箱:从引用类型转换为值类型;

object obj = null;//引用类型

            obj = 1;//装箱,boxing。把值类型包装为引用类型。

            int i1 = (int)obj;//拆箱。unboxing

5、受管制(托管)的代码

托管代码(safe):使用CLR编译语言编辑器开发编写的代码,由公共语言运行库环境执行的代码;

非托管代码(unsafe):在公共语言运行库环境外部,由操作系统直接执行的代码。

6、CLR,CTS,CLS

CLR:公共语言运行库(Common Language Runtime);

CTS:通用类型系统(Commom Type System);

CLS:通用语言规范(Common Language Specification);

7、应用程序域,程序集

应用程序域:

  就是为安全性,可靠性,隔离性,和版本控制,及卸载程序提供的隔离边界。它通常由运行库宿主创建,应用程序域提供了一个更安全,用途更广的处理单元。它由公

共语言运行库围绕同一个应用程序范围内创建的对象建立。应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小

程序集:

  在.NET中可部署的基本单元成为程序集。是一个或多个托管模块,以及一些资源文件(EXE文件的过程程序集或DLL文件的库程序集)的逻辑组合。

强命名程序集:

  程序集需要经过加密签名,强命名程序集可以部署到全局程序集缓存中,成为公共程序集。

8、Static 和 非Static的区别: 
(1)、用Static声明的方法和变量,不需要实例化该类,通过类调用(static表示“静态”或者“全局”,被static修饰的方法或者变量独立于该类的任何对象);

(2)、非Static的,就一定要用实例化的对象来调用,即用new来实例化。

.NET面试题(一)
class Program
    {
        private static int _numberA = 5;//静态字段
        private int _numberB = 3;//非静态字段

        static void Main(string[] args)
        {
            //静态方法,字段直接通过类来调用(对于Program.Add()或Program._numberB,Program.可以省略);
            Program p = new Program();//对于非static的方法,字段要通过类的实例化对象来调用;
            
            //注意对于调用不同类型方法,不同类型字段的写法
            Console.WriteLine(Program.Add(Program._numberA,p._numberB));
            Console.WriteLine(Add(Program._numberA, p._numberB));
            int sub=p.Subtract(_numberA,p._numberB);
            Console.WriteLine(sub);
            Console.ReadKey();
        }

        //静态方法
        public static int Add(int a,int b)
        {
            return a + b;
        }

        //非静态方法
        public int Subtract(int a,int b)
        {
            return a - b;
        }
    }
.NET面试题(一)

 

9、面向对象的思想

继承、封装,多态。

10、接口,抽象类

(1)、接口(命名规范:以大写字母I作为接口名称的开始)

(2)、抽象类

(3)、接口和抽象类的区别:

  a.抽象类可以同时包含具体方法(已经的实现的方法)和抽象的方法(每个抽象类中至少有一个抽象方法);接口不包含任何方法的实现,必须由实现该接口的类提供所有的实现;

  b.抽象类可以包含构造函数和析构函数;接口不可以。

  c.一个类可以实现多个接口,但是只可以从一个抽象类继承。

  d.接口中的方法不能有访问修饰符。

11、类和结构的区别

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。

Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。如:Int32、Boolean等都属于结构体

12、重载(overload),重写(override),扩展方法(C#3.0新增)

(1)、重载方法:类中包含多个具有相同名称和不同签名(形参)的方法。

(2)、重写:提供了子类中改变父类方法行为的实现(是进行基类中函数的重写)。

13、访问修饰符

private:关键字指示成员在类的外部不可见;

public:关键字指示成员在类的外部可见,并对所有派生类可见(在整个项目中都可见);

protected:关键字指示成员在类的外部不可见,对所有派生类可见;

internal:关键字指示成员在类的外部可见,并对所有的派生类可见;

protected internal:关键字组合指示成员在类的外部可见,并对所有的派生类可见

14、委托和事件

(1)、委托:

  a.在C#中,委托是包含方法引用的引用类型。我们可以将委托认为是指向函数的指针。不是直接的调用该函数,而是通过使用委托来指向该函数,然后通过调用委托来调用该方法。

  b.使用delegate关键字来定义委托的类型,委托类型的声明类似于函数的声明,但是委托没有函数主体。为了使委托对象指向函数,可以创建委托类型的对象,并且使用希望指向的方法实例化该对象。

未使用委托的代码:

.NET面试题(一)
class Program
    {
        static void Main(string[] args)
        {
            int num1 = 5;
            int num2 = 3;
            Console.WriteLine(Add(num1,num2).ToString());//调用Add()方法
            Console.WriteLine(Subtract(num1, num2).ToString());
            Console.ReadLine();
        }

        static int Add(int num1,int num2)
        { 
            return (num1+num2);
        }
        static int Subtract(int num1, int num2)
        {
            return (num1 - num2);
        }
    }
.NET面试题(一)

使用委托的代码:

.NET面试题(一)
class Program
    {
        delegate int MethodDelegate(int num1,int num2);//
        static void Main(string[] args)
        {
            int num1 = 5;
            int num2 = 3;
            MethodDelegate method = new MethodDelegate(Add);//创建委托的对象,声明mehod为指向Add()方法的委托。此处还不能直接调用Add()方法
            //或者 MethodDelegate method=Add;
            //使用Method委托调用调用Add()方法
            Console.WriteLine(method(num1,num2).ToString());//调用Add()方法
            Console.ReadLine();
        }

        static int Add(int num1,int num2)
        { 
            return (num1+num2);
        }
        static int Subtract(int num1, int num2)
        {
            return (num1 - num2);
        }
    }
.NET面试题(一)

相关文章: