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来实例化。
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;
}
}
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关键字来定义委托的类型,委托类型的声明类似于函数的声明,但是委托没有函数主体。为了使委托对象指向函数,可以创建委托类型的对象,并且使用希望指向的方法实例化该对象。
未使用委托的代码:
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);
}
}
使用委托的代码:
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);
}
}