黑马程序员_学习日记1_有关C#基础知识总结归纳之对象和类型

时间:2023-01-22 00:27:24

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
一:类

    不要把类想的过于复杂,也不必要因为自己心里明白但有无法组织出简练的语言将其概括出来而感到纠结。

     现在我就用我的一句话来诠释什么是类的结构:类和结构实际是就是创建一类对象的模板,每个对象都包含数据,并提供了访问数据和处理数据的方法。

 

下面我就对其上述描述类和结构的句子中三个标红的关键句加以解释:

对象的模板:如果我们创建了一个类或者是结构的实例,那么我们这个实例就具有了和模板一模一样的属性 方法成员,我是来自于模板的。它有什么 我就有什么。

 

数据:类的的成员分数据成员和函数成员.

其中数据成员包括:字段,常量,事件.数据成员可以是静态的,但它默认是非静态的。你可以在该字段的数据类型前面添加一个static关键字来是数据成员字段成为静态字段是与类相关或者与类的实例相关的变量。

const与类的关联方式和字段与类的关联方式。(字段和常量字段的区别就在于,静态字段你必须在申明时就给它赋初始值。)

事件是类的成员,在发生某些行为时,它可以让对象通知调用方。

 

函数成员:包括 方法,属性,构造函数,终结器,运算符和索引器 概括一句话,类中的函数成员提供了操作类中数据的某些功能。

方法:方法是与某个类相关的函数,与字段一样,默认是实例的,除非加上static关键字。

属性:属性是一个方法或是一对方法,它在客户端看起来就是一个属性,get set 的返回类型和赋值类型 都是与当前你绑定了那个字段的数据类型相同。

构造函数:是在实例化对象时有.NET 自动调用的函数,它用于初始化所有的字段,在没有给字段赋于值时,它会默认的将值类型给0,引用给null,bool型给false。

析构函数:是在CLR检测到不在使用某个对象时候调用的一个函数,它的起名和类名相同,不过得在类名前面加一个“~”符号。由于它是有CLR检测并调用,所以

我们无法预测 什么时候会调用它。

运算符:运算符运算执行最简单的加法和剪发运算。C#允许定义自己的运算符应用于自己的类。(operator)

索引器:允许对象以岁索引和集合的方式进行索引。

 

方法传递参数:(ref关键字)

 给方法传递参数可以通过引用的方式或者是值的方式。在变量通过引用的方式传递给方法的参数时,在方法内部对该参数的改变会直接影响到参数本身的值。

如果是进行值传递,方法得到的是该变量值得一个副本而已。方法体内的改变对原来的那个变量无任何影响。对于复杂数据,使用引用类型传递的方式效率会很高,因为按值传递时候,必须复制大量的数据。

在C#中,值类型是按值来传递参数的,但是如果 你定义的是一个结构,结构是值类型,如果按传统的值类型的传递方式,会复制大量的数据,效率会比较低下。这个时候,只需要在传递的参数前面加上一个ref关键字就可以了。它可以强制把值类型的传递方式转换为按引用传递。注意,在调用此方法时,该参数前面也要加上ref 关键字。 下面举个例子:

//首先顶一个个结构:

public struct MyStruct

{

     //someFields,,.,,,

}

//定义一个方法

public void ParamIsStruct(ref MyStruct Ms)

{

       //此时的MyStruct将按引用的方式来传递数据

}

 

方法的调用

ParamIsStruct(ref Ms);//注意别掉了前面的那个ref

 

 方法传递参数:(out关键字)

C#中使用一个变量或者对象时,必须按"三步走";

那就是:申明 ---- 赋值  ---再使用,

对于传统方法的参数 也是如此。 变量 对象在作为方法的参数传递时,必须是要赋值过的。但是如果你想使你的参数,不进行赋值操作就能成为方法的参数,只需要在方法参数前面加上一个out关键字。该参数也是通过引用来传递的,所以方法体中对该参数的任何改变,都会被保留下来。

使用方式和ref一样。

 

 

下面告诉大家一个c#中和方法参数一样但是很少用到的小技巧,那就是 ------ 可选参数。

通过名字 我们也知道,可选参数是可以写也可以不写的参数。C#中对可选参数的申明有两个条件

第一:必须有 初始值,

第二:必须处于参数签名列表的最后

eg:

public void TestMothed(int canselected =1);//此方法中 canselected就是一个可选参数。

 

还有一个就是属性的自动实现。

当你的为你的字段定义的属性访问器中没有什么逻辑的话,

你可以直接使用 public string Field{get;set;}的方式来定义。

不需要去申明 public strinf field;编译器会自动创建它。

 

 

 


---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/