其实昨天应该写一下去书店看《.net3.5高级编程》,感觉看到Enum,struct类的封装的时候有些困难了,3个小时,看的进度慢,那本书的一些记住的要点,记住的如下。
1.参数类型,ref out param 一般参数。
用的较多的是一般的参数,后来接触了out方式的参数,在数据库分页的时候需要用到,比如查询某一页数据,又要得到所有记录的总数,需要返回两种类型的值,这个时候就可以使用out方式,比如 IList<Models> GetRows(int page,out int rowsCount){...}需要注意的时候,在GetRows函数返回前中需要给rowsCount付值,否则就会出错。
IList<Models> GetRows(int page,out int rowsCount){
if(page<1){ return new List<Models>() ; }//编译会出错,在之前需要增加rowCount=0;
}
ref类型的参数用的不多,但是也很好理解,谈到这个,想起一道c的面试题,就是写一个swap函数,交换两个数字。很多人写成
void swap(int a,int b){
int temp=a;
a=b;
b=temp;
}这样是一种错误的写法,应该只用指针类型 void swap(int *a,int *b){...}这样的方式。指向地址,这样才能做到交换。
在C#中,对于值类型和string,如果要实现改变输入参数的值,那么就需要用到ref 类型的参数。
void RefExm(ref int a){ a=10; }
如果在调用其该函数,在a的初始值为5,那么执行完这个参数后就为10.
void main(){
int a=5;
RefExm(ref a);
Console.WriteLine(a);
}
这个时候a已经变为了10.
致于param我的感觉就是可以在参数赋值的时候方便了一些。
void ParamExm (param int[] a){
}
那么在执行的时候可以用ParamExm(1,2,3)这样的方式进行参数赋值。而不仅仅是int[] a={1,2,3}这样的ParamExm(a);
关于ref out param就记住这么多了。
2.数组中实现foreach需要使用IEnumerable接口和GetEnumerable()方法。数组中要实现Sort()方法需要实现ICompare接口。其他的关于枚举和数组的方法和用法,没怎么记住,只是以后定义用户类型,最好能用上枚举。
3.static 关于static关键字,在使用的要领上,比如一些公共的对象,比如货币类型,员工部门等这些经常用的,可以在类中定义成static方式,在定义静态构造函数中查询数据库,并赋值给static变量,这样就不会造成频繁访问数据库。(想想以前写的一些类,应该需要改改了。呵呵)另外还有static readonly和const的其实效果是一样的,不同的是,const只能一开始赋初值,在编译时赋值,而static readonly可以再构造函数中赋值,在运行时赋值。
4.class a和public class a的区别,对于没有嵌套的类来讲 class a的访问权限是interal,就是在程序集中可以访问。不能跨程序集,如果要跨程序集,那么还是只能用public。
5.this的构造函数用法,当定义多个构造重载(overload)函数,为了避免代码冗余,可以用this函数进行简化,及定义一个共有的主构造函数,再重载其他构造函数。
class a{
public a(){}
public a(int param1,string param2){
....
}
public a(int param1):this.a(param1,""){
....
}
}
这样,当执行构造函数a(1)是,实际先执行了a(1,""),然后在执行a(1),这样就避免了再a(int param1)中重复定义a(int param1,string param2)的代码。
6.类封装的第一个原则,将其成员变量都定义成私有,采用属性的方式访问。
例如:
class a{
private int param;
public A{
get{return param;}
set{param=value;}
}
}
当然.net3.0可以定义这样public A{get;set;}
其他封装的原则,今天面试问了一个低耦合,高聚合。没反应过来,最后在引用一下人家的话作为今天的结束吧。
内聚(本题的聚合):内聚是指一个模块内部各个部分之间的关联程度
耦合:耦合指各个模块之前的关联程度
封装原则:隐藏对象的属性和实现细节,仅对外公开借口,并且控制访问级别
在面向对象方法中,用类来实现上面的要求。用类实现封装,用封装来实现高内聚,低耦合。
模块内部,各部分高度关联,模块之间,相互独立。如何实现,需要好好想想。接着学习吧。
1.参数类型,ref out param 一般参数。
用的较多的是一般的参数,后来接触了out方式的参数,在数据库分页的时候需要用到,比如查询某一页数据,又要得到所有记录的总数,需要返回两种类型的值,这个时候就可以使用out方式,比如 IList<Models> GetRows(int page,out int rowsCount){...}需要注意的时候,在GetRows函数返回前中需要给rowsCount付值,否则就会出错。
IList<Models> GetRows(int page,out int rowsCount){
if(page<1){ return new List<Models>() ; }//编译会出错,在之前需要增加rowCount=0;
}
ref类型的参数用的不多,但是也很好理解,谈到这个,想起一道c的面试题,就是写一个swap函数,交换两个数字。很多人写成
void swap(int a,int b){
int temp=a;
a=b;
b=temp;
}这样是一种错误的写法,应该只用指针类型 void swap(int *a,int *b){...}这样的方式。指向地址,这样才能做到交换。
在C#中,对于值类型和string,如果要实现改变输入参数的值,那么就需要用到ref 类型的参数。
void RefExm(ref int a){ a=10; }
如果在调用其该函数,在a的初始值为5,那么执行完这个参数后就为10.
void main(){
int a=5;
RefExm(ref a);
Console.WriteLine(a);
}
这个时候a已经变为了10.
致于param我的感觉就是可以在参数赋值的时候方便了一些。
void ParamExm (param int[] a){
}
那么在执行的时候可以用ParamExm(1,2,3)这样的方式进行参数赋值。而不仅仅是int[] a={1,2,3}这样的ParamExm(a);
关于ref out param就记住这么多了。
2.数组中实现foreach需要使用IEnumerable接口和GetEnumerable()方法。数组中要实现Sort()方法需要实现ICompare接口。其他的关于枚举和数组的方法和用法,没怎么记住,只是以后定义用户类型,最好能用上枚举。
3.static 关于static关键字,在使用的要领上,比如一些公共的对象,比如货币类型,员工部门等这些经常用的,可以在类中定义成static方式,在定义静态构造函数中查询数据库,并赋值给static变量,这样就不会造成频繁访问数据库。(想想以前写的一些类,应该需要改改了。呵呵)另外还有static readonly和const的其实效果是一样的,不同的是,const只能一开始赋初值,在编译时赋值,而static readonly可以再构造函数中赋值,在运行时赋值。
4.class a和public class a的区别,对于没有嵌套的类来讲 class a的访问权限是interal,就是在程序集中可以访问。不能跨程序集,如果要跨程序集,那么还是只能用public。
5.this的构造函数用法,当定义多个构造重载(overload)函数,为了避免代码冗余,可以用this函数进行简化,及定义一个共有的主构造函数,再重载其他构造函数。
class a{
public a(){}
public a(int param1,string param2){
....
}
public a(int param1):this.a(param1,""){
....
}
}
这样,当执行构造函数a(1)是,实际先执行了a(1,""),然后在执行a(1),这样就避免了再a(int param1)中重复定义a(int param1,string param2)的代码。
6.类封装的第一个原则,将其成员变量都定义成私有,采用属性的方式访问。
例如:
class a{
private int param;
public A{
get{return param;}
set{param=value;}
}
}
当然.net3.0可以定义这样public A{get;set;}
其他封装的原则,今天面试问了一个低耦合,高聚合。没反应过来,最后在引用一下人家的话作为今天的结束吧。
内聚(本题的聚合):内聚是指一个模块内部各个部分之间的关联程度
耦合:耦合指各个模块之前的关联程度
封装原则:隐藏对象的属性和实现细节,仅对外公开借口,并且控制访问级别
在面向对象方法中,用类来实现上面的要求。用类实现封装,用封装来实现高内聚,低耦合。
模块内部,各部分高度关联,模块之间,相互独立。如何实现,需要好好想想。接着学习吧。