C#面向对象编程

 在面向对象编程出现之前,几乎所有的程序都是以面向过程为中心的,程序的运行从某个地方开始运行到达到一定的目的就结束了。而且程序的代码修改和重复使用率比较低。面向对象编程把整个世界看成一系列实体的集合,所有的个体都是对象。而对象就是具有一定属性和行为的实体的集合。下面的表格大概的说明了面向过程编程(OPP)和面向对象编程(OOP)的区别。

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作为一个变量类型表示对调用该方法的结构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值