OPP | OOP |
一. 类和对象
以前学过C++或者JAVA的人对于类和对象应该比较了解;对象是OPP应用程序的一个组成部分,这个组成部件封装了部分应用程序,这部分可以是一个过程,数据,和一些更抽象的实体。类由成员和方法组成。其中在C#的类中包含了:属性,字段和方法。下面依次介绍。
属性和字段可以访问对象中包含的数据,这个对象数据可以用于区别不同的对象,因为一个对象的属性和字段是独一无二的。先看下在C#中如何定义类。
字段:
字段: class school //定义了一个类 { public string schoolName; } // class className{ <code> } | 属性: class school { private string schoolName; public string schoolName; { get { return this. schoolName;} set { this. schoolName=value;} } |
属性和字段的区别: 属性是逻辑字段;属性是字段的扩展,源于字段;属性并不占用实际的内存,字段占内存位置及空间。 最直接的说:属性是被"外部使用",字段是被"内部使用".我们下面来学习下一个Person类。本文发表于编程入门网:www.bianceng.cn
class Person //定义一个类为Person { public String name;//字段 public String sex; //字段 public int age; //字段 public double weight; //字段 public Person()//构造函数,初始化对象 { name="LFC";// sex="man";// age=1;// weight=10;//初始化四个字段; } public Person(String name,String sex,int age,double weight) {//构造函数,初始化指定的对象 this.name=name; this.age=age; this.weight=weight; this.sex=sex; }//有关this以后再详细说明。在这里理解为“这个” public void eatFood(double quanity)//类中的方法 { double temp=this.weight;//有关this以后再详细说明。在这里理解为“这个” this.weight=temp+quanity; } public void pushSth(double liang) //类中的方法 { double temp=this.weight; this.weight=temp+liang; }} | ||
Person mywife=new Person();//创建一个Person类的对象。 Console.WriteLine (mywife.weight);// mywife.eatFood(22);//调用函数 Console.WriteLine (mywife.weight); mywife.pushSth(3.2);//调用函数 Console.WriteLine (mywife.weight); |
二.构造函数
上次说到类是封装了属性和方法的实体的集合,面向对象编程过程把所有的东西都看成对象,而且世界上没有一模一样的对象,所以在创建对象的时候要对对象的属性进行初始化.在定义基本类型变量的时候.声明一个对象的方法如下:
int myint = 3;
但是在创建对象型数据的时候要用到关键字new来完成对象的创建.最基本的string类型对象的创建方法如下:
string name = new string("Lu xiaofeng");
这里在调用name的时候内存中会加载 name=”Lu xiaofeng”.
对象型数据必须在创建后才能使用,否则会出现错误一下:可能尚未初始化变量.另一个比较重要的概念就是构造函数,每一个类都有一个默认的构造函数来初始化对象的一些数据.同时要注意的是构造函数的形式:
| 构造函数的函数名必须与类的名字相同,而且是没有任何返回值,也不允许用void来修饰.但是构造函数允许重载:一个类中可以用多个不同的构造函数来满足创建对象.例如在Person类中有两个构造函数: public Person(){}构造函数 |
和public Person(String name,String sex,int age,double weight)//构造函数.当我们在定义一个Person类的变量的时候; Person myman=new Person();同时也可以用另一个构造函数来初始化一个对象.Person niu=new Person("name","man",22,99);但是这个对象和myman对象是不一样的.但是这两个对象的属性是不一样.
三.this的引用
我们先来看下两个构造函数的具体内容:
public Person() { name = "Lu xiaofeng"; sex = "man"; age = 22; weight = 99; } | public Person(string name, string sex, int age, double weight) { this.name = name; this.sex = sex; this.age = age; this.weight = weight; }//构造函数二 |
在第二个构造函数中多了个this,this的作用是用来指定”这个”的.尤其是在下面的情况:
public string name public string sex;public int age;public double weight;
这四个字段的名字与构造函数public Person(string name, string sex, int age, double weight)的参数一样的时候.this是用来指定当前这个对象的.
当然我们可以把public Person(string name, string sex, int age, double weight)的参数换成其他的名字. public Person(string myname, string mysex, int myage, double myweight).这个并不会影响程序的结果,但是如果把上表构造函数二中的中的this去掉,来看看有甚么影响.创建两个对象.person1,person2.
Person newman = new Person("lixiao", "woman", 11, 88);
Console.WriteLine("name={0},sex={1},age={2},weight={3}",newman.name, newman.sex, newman.age, newman.weight);
Person another = new Person();
Console.WriteLine("name={0},sex={1},age={2},weight={3}",another.name, another.sex, another.age, another.weight);
Console.ReadKey();
public Person(string name, string sex, int age, double weight) { name = name; sex = sex; age = age; weight = weight; }//去掉 this后. |
去掉this后的效果.有关this的知识在后面还会介绍. 现在对this做个简单的小节:this关键字引用被访问成员所在的当前实例。静态成员函数没有this指针。this关键字可以用来从构造函数,实例方法和实例化访问器中访问成员。
不能在静态方法。静态属性访问器或者域声明的变量初始化程序中使用this关键字,这将会产生错误。
1.在类的构造函数中出现的this作为一个值类型表示对正在构造的对象本身的引用。
2.在类的方法中出现this作为一个值类型表示对调用该方法的对象的引用。
3.在结构的构造函数中出现的this作为一个变量类型表示对正在构造的结构的引用。
4.在结构的方法中出现的this作为一个变量类型表示对调用该方法的结构。