您的位置:首页 > 编程语言 > C#

C#编程入门与应用Day5

2018-01-22 09:17 260 查看
第九章:内置集合和自定义集合

1.集合和数组有些类似

2.集合内置集合和自定义集合,自定义集合需要重写基类的Add()方法等,一个完整的集合需要包含增、删、减、改、查等许多复杂的功能。

第十章:类和对象

1.面对对象编程中,程序的基本单元是对象Object,数据封装在对象中。类是对象的模板,是预定义好的结构,所谓实例化一个类,就是将数据填入模板(填入类中)。类是抽象的概念,对象(包含数据结构和算法)是具体的概念,对象和现实世界中的物体一样,有特定的属性和操作。

2.面对对象编程有封装性,继承性和多态性等特点

封装性:类是属性和方法的集合,为了实现某项功能而定义类后,开发人员不需要了解类内每句代码的含义,只需通过对象来调用类内的某个属性或者方法即可实现特定的功能。

继承性:通过继承可以创建子类(派生类)和父类之间的层次关系,子类可以从父类中继承属性和方法。假如已经定义A类,接下来定义B类,B类中许多属性和方法和A类相同,那么可以使B类继承A类,提高程序的开发效率

多态性:类的多态性是指不同的类进行同一操作时可以有不同的行为。例如火车和汽车都可以移动,但移动的行为是不同的,其移动时,火车需要在铁轨上,汽车需要在公路上。

3.类的实例化结果是对象,一类对象的抽象就是类。类描述了一组具有相同特性(属性)和相同行为(方法)的对象。类的实例化,即从一类属性和方法中创建一个具体的有类的属性和方法的对象。

4.若显式指定类的有参构造函数时,需要手动创建类的无参构造函数,若不创建,在创建无参数类的实例对象时会报错。

5.静态构造函是实现对一个类进行初始化的方法成员,一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符,而且不能被调用,当类被加载时,类的静态构造函数自动被调用。

6.

const 
[词典][医] 常数,不变的; Pascal语言中常量说明;

7.C#中的属性是什么

public int Age{get;set;}Age属性

首先我来个简单的假设.
有个用户类(Users) ,里面定义了一个表示年龄的字段 _age .
如果我在其它的类里需要用到Users类里的_age字段(如获取用户年龄) 只能读取,不能修改.你将会怎么设计Users类里的年龄字段_age呢.是private 、public、还是什么呢?
如果是private 其它类内根本看不到.如果是public任何人都可以修改年龄了.
这时我们就可以用到属性了.
private int _age; //定义字段 一般都是private外界是不能随便修改的.
public int Age //定义一个属性.属性是public的.共外界访问.
{
get
{
return _age; //返回年龄
}
}
属性有get;set访问器.获取属性时,会执行get模块.给属性负值时 会执行set模块.
我这里没有写set,也就是说外界是不能修改的.这样就可以满足我们的需要了.
当然这只是一个很简单的一个例子,具体的还是要看你的需求.如获取属性值、设置属性值时都可以在get、set里写自己的逻辑.

属性和字段的区别

    在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。

class MyClass

{

       Private  string  name;

 public string Name

 {

  get {return Name;}

  set {Name=value;}

 }

}

(1)属性可以保证安全,当不在本类中使用时可以保证使用属性名可以避免

用字段的名字。
 

(2)属性的set和get函数可以限制字段的一些功能,以达到某种目的。
 

如:
 

private int a=0;

public int A

{

     get{return this.a;}

     set

     {

         if(value >= 0 && value <= 100)

              this.a=value;

         else

              throw new Exception("值的范围不合法。");

     }

}

(3)属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。

属性可以当作对字段的封装,字段内部使用,属性因为安全性高可以外部使用.属性比字段,多设了get和set属性

P246属性是对字段的封装,属性的实质是方法(get和set方法)公共字段速度上更快,但必须开放为字public。实际开发中,公共字段和属性在合适的条件下都可以使用,但是开发者应尽可能使用属性,而不是字段;将所有字段都设置为私有字段,如果要暴露他们,则将他们封装成属性,可以保证数据的安全。

8.实参和形参

形参:在定义函数中指定的参数就是形参,在未出现函数调用时,他们并不占内存中的存储单元,只有在发生函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。
实参:实参可以是常量、变量和表达式,但要求有确定的值。在调用时将实参的值赋给形参。在内存中,实参单元和形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留原值。
C#中有两种类型的数据,一种为值类型;另一种为引用类型。理解这两种数据类型,有利于进一步编程和实现。
他们最大的区别就是存储的位置不同,前者值类型存储在内存的堆栈中(一些书上面也说是【栈】),后者存储在内存堆中(一些书上面说是【堆】),栈中的内存不需要自己就能回收,内存堆中的数据需要.Net FrameWork 自己的内存清理机制进行回收。
值类型的数据传递参数的时候,默认情况下采用传递形参,实参的内容不变,如果想把实参传递过去,那么,在C#中只有通过ref关键字来实现。其实这里面的ref和c/c++中的地址引用差不多,具体原理没有深究,但是可以这么理解。
但是引用类型传递的时候是传递的内存的地址,也就是“传递实参”。所以有些时候就能够理解一些东西了。比如:DataSet传递时候,就是传递的“实参”。他也就是引用类型。
值类型不是很多,int float double char等。注意:string为引用类型。这个比较特殊。

9.方法有静态方法和非静态方法,也可以成为实例方法。静态方法在类的方法声明中需要包含static关键字,可以直接通过“类型.方法名”进行调用。需要注意的是静态方法并不针对特定实例进行操作,在静态方法中引用this会导致编译错误。

非静态方法对类的某个指定的实例进行操作,可以使用this关键字进行访问。

10.C#中的对象就是把类进行实例化。

11.this关键字

(1)引用类的当前实例,this仅仅局限于对象内部,对象外部是无法看到的。静态成员不是对象的一部分,因此不能在静态方法中引用this。

(2)调用其他的构造函数,this关键字前面加:可以表示调用其他函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: