C sharp 学习(三)
停了几天,今天继续
11. 函数的ref、out参数
函数的处理工程中会用到两个关键字:ref和out
ref类似C++中的引用关键字,如:void add(ref i)
{
i++;
}
int a=1;
add(ref a);//实现了对a自增的操作
out实现了内部赋值操作,在运用中,忽略了传进来参数的初始化值,且对参数结束函数前必须重新赋值或初始化
这也是与ref运用的区别之一,由于是对参数的引用,所以参数必须进行初始化后才能应用
注:ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
out返回参数的一个应用有int.TryParse,检查转换是否成功
string s = console.readline();
int i;
if(int.Tryparse(s,out i))
{
console.writeline("转换成功 {0}",i);
}
else
{
console.writeline("转换失败");
}
12. 类
作为面向对象的一门语言,C sharp同样有类的机制:封装,继承,多态
要点1:类不占内存,对象才占内存.类是抽象的,对象是具体的.字段是类中定义的相关变量.方法类似于函数,是类可执行的操作.
要点2:定义字段
class Person
{
public int age;
public string name;
}
Person p1=new Person();//Person()是类默认的构造函数,new Person()则创建了一个新的对象
p1.age=17;
p1.name="Tom";//字段的public定义允许外部对字段直接操作,这样极大的破坏了类的封装性,所以平时要养成将类的字段定义为private的习惯,此时用类的属性来解决外部操作的问题
class Person
{
private int age;
public int Age
{
set{this.age=value;}//this可省略
get{return age;}
}
private string name;
public string Name
{
set{this.name=value;}//this可省略
get{return name;}
}
Person p1 = new Person();
p1.Age=17;
p1.Name="Tom";//在操作中由字段装换为对属性进行读写,在实际的运行中,写属性时调用set,读属性时调用get,其真正是数据保存在字段中(private int age和private string name),同时在set和get中可以增加对外读写限制的语句,这样就避免了外部对数据的随意操作
实际运用中还可简写为
class Person
{
public int Age
{
set;get;
}
public string Name
{
set;get;
}
}//实际通过反编译可以看出,省略的代码由编译器补上了.
只用set或者只用get就可以定义只读或者只写属性(只写的不常见)