第四讲 属性与方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//定义用户Baidu Nhomakorabea号属性
public string ID //属性名不能和私有变量同名 {
get
{
8 属性与方法
return id; //返回和设置的一定是类的私有变量 } set { id=value; } } //定义姓名属性 public string Name {
8 属性与方法
get { return name; } set { name=value; } } }
public int X
{
9 结构和类
get{return x;} set{x=value;} } public int Y { get{return y;} set(y=value;} } }
9 结构和类
8 属性与方法
{ return Day; } set { Day=value; } } } }
value 是隐形参数,此参 数的类型是属性类型
8 属性与方法
8.2 属性的使用
因属性定义在类的内部,是非静态方法,要访问属性, 需要先实例化类的对象,并通过如下方式访问: 对象名.属性名 思考:
(1)是否可以在类中定义和使用静态属性?在什么情况下 可以考虑使用静态属性?
下面例子定义一个类,在类中定义两个string类型的变 量,用于记录用户名称和编号,然后在该类中自定义两个 属性,用来操作用户编号和姓名。实例化类对象,利用属 性改变类的私有变量的值。
8 属性与方法
class MyClass
{
private string id=“”; private string name=“”;
9 结构和类
类继承中,基类中的成员可以是虚拟的,虚拟成员可以由 继承它的类重写,即在派生类中可以提供成员的其它执行代 码。基类还可以定义为抽象类,抽象类不能被直接实例化, 可以使用抽象类派生子类,再对子类进行实例化。
举例:
class MyClass1
{
private int x=0; private int y=0;
9 结构和类
在C#中用关键字struct声明结构:
存取修饰符 struct 结构名 { }
举例:
public struct Rect { public double width; public double height;
9 结构和类
public double Area() { return width*height; }
}
//结构的使用,需要先实例化结构,然后就可以给结构 中的成员变量赋值,并调用结构中的方法操作成员变量得 到一定结果。 举例:
9 结构和类
Rect rect1; //实例化结构 rect1.width=5.2; rect1.height=3.8; messagebox.show(rect1.Area().ToString());
3 类的申明
C#中类是用class关键字来声明,语法如下:
9 结构和类
类修饰符 class 类名 {
}
举例:
public class Car { public int number;//编号 public string color;//颜色 public string brand;//厂家 }
9 结构和类
8 属性与方法
例子:建立重载方法add:
public static int add(int x,int y)
{
return x+y; } public double add(int x,double y) { return x+y; }
8 属性与方法
public int add(int x,int y,int z) {
8 属性与方法
8.1 属性的基本概念
属性主要用于操控类的私有成员。大家知道,类的 私有成员只能在类的内部访问,这是类的封装性所确定 的。为向操作公共数据成员那样操作私有成员,就需要 使用属性。属性是一种用于访问对象或类特性的成员。 它有访问器,访问器实现对属性值的读取或写入操作。 属性的访问器包括get访问器和set访问器,前者用 于获取属性的值,后者用于给属性赋新值。 属性有两种存在形式,一是在公共语言运行库的基 类中定义的属性,另一种是可以创建的自定义属性。 在此仅讨论第二种属性。
}
}
public :不限制对该类的访问;
protected:只能从其所在的类或所在类的子类进行访问。
9 结构和类
internal:只有其所在的类才能访问。 abstract:抽象类,不能建立类的实例。 private:在类的内部可以访问,或.NET的应用程序或库 才能访问。
sealed:密封类,不允许被继承。
8 属性与方法
自定义属性申明在类模块内,定义属性时需要指定属性 的访问级别、类型及属性的名称,然后是申明get访问器 和set访问器的代码块。相当于类的一种公共方法。下面 定义一个Date类,在其中定义一个day属性。
public class Date { private int Day=7; public int day { get
8 属性与方法
protected internal,除最后一个外,指定一个以上的访 问修饰符,将导致编译错误。 public :申明为public的方法,可以允许任何外部类对 其进行访问,即其访问不受限制。
private:与public相反,private对类方法的访问提供了 最大限制,方法只允许在定义它的类的内部被访问,若方 法没有定义存取修饰符,则默认为private存取限制。 protected:在基类和其派生类中才可以访问的方法。
MyClass1 myclass1=new MyClass1();
9 结构和类
public int Add()
{
return myclass1.X+myclass1.Y; }
}
//使用定义的类 MyClass1 myclass1=new MyClass1(); MyClass2 myclass2=new MyClass2(); myclass1.X=3; myclass1.Y=5;
9 结构和类
messagebox.show(myclass2.Add());
在上述例子中,运行的结果为0. 请大家分析是什么原因? 2 类的继承 在C#中只允许一次继承一个类。父类中的私有成员不 能被其子类所访问。为解决这一问题,可以使用存取权限 修饰符protected,被该修饰符修饰的成员在基类中和其 子类中均可以被访问。 可以在继承类的基础上,添加、修改或替换类中的方 法,实现对类的扩充,在实际工作中可以大大提高编程效 率。
//也可以使用new关键字实例化结构对象。
9 结构和类
9.2 类
1 面向对象的编程技术(OOP-object-oriented programming)将算法与数据结构看做一个整体,称为 对象。将一个大的系统分割为很多模块,每个模块完成 一定的功能,并彼此相互独立。这样的模块,在面向对 象编程中被定义为类。现实世界中的对象均有属性和方 法,在定义类的时候,对应成员变量和成员函数。面向 对象编程具有封装、继承和多态等特点。 (1) 封装:类是属性和方法的结合,当为实现某些功 能而定义类后,开发人员并不需要了解类内部每条代码 的具体含义,只需通过对象来调用类内部的属性或方法, 以实现某项功能。
9 结构和类
(2)继承:通过继承可以创建子类(派生类)和父类之 间的层次关系,子类从其父类中继承属性和方法,这种模 型,可以提高程序的开发效率。
(3)多态:指不同的类进行同一操作,可以有不同的行 为。 2 类的概念
类是具有相同对象的集合,描述了在概念上具有相同含 义的对象,并为这些对象统一定义了属性和方法。
internal:允许同一个组件里的类对其方法进行访问。 方法申明的返回类型指定了由该方法计算和返回值的类 型,若方法无返回值,则其返回类型为void。
8 属性与方法
方法的名称及其参数的数目、修饰符和类型定义了该方法 的签名(signature)。返回类型和形参名称均不是签名的组 成部分。 8.3.2 方法的分类 方法分为静态方法和非静态方法。静态方法的声明中包 含修饰符static,不包含static修饰符的方法称为非静态方 法。 静态方法和非静态方法的区别是,前者直接通过类名进 行调用,后者需要通过类的实例化对象进行调用。 8.3.3 方法的重载 所谓方法重载指方法名相同,但各种方法中参数的数据 类型、个数或顺序不同。只要类中有两个以上同名方法, 但参数类型、个数或顺序不同,调用时编译器能自动判断 调用何种方法。
return x+y+z;
}
//在控件中进行调用 提问:分析该如何进行上述方法的调用?
9 结构和类
本章讲述的重点:
结构的基本概念 结构的用途及使用方法 面向对象技术的基本概念 类的基本概念
类的构造函数和协构函数的使用
对象的申明和实例化 对象的封装、继承和多态
9 结构和类
9.1 结构概述
public int z=0; public Lee1()
{
z=x+y; }
9 结构和类
~lee1()
{ messagebox.show(“协构函数自动调用!”)
}
5 对象的声明和实例化 在C#中对象是类的一个实例,通过new关键字创建类对 象。 9.3 类的面向对象特性 1 封装 C#中使用类实现对数据的封装,将数据和方法封装为一
4 构造函数和协构函数 是类中比较特殊的两个函数,用于对类对象进行初始 化和回收对象资源。对象生命周期从构造函数开始到协构 函数结束。构造函数的名字与类同名,协构函数的名字与 类名相同,但需要在名字前加“~”。
9 结构和类
举例:
class Lee1
{ public int x=3;
public int y=5;
8 属性与方法
//实例化类对象使用属性 MyClass myclass=new MyClass(); myclass.ID=“BH001”; myclass.Name=“TM”;
messagebox.show(myclass.ID);
messagebox.show(myclass.Name);
8 属性与方法
8.3 方法
方法是类或结构的成员,是和类或结构相关联的动作。是 根据类或结构的成员变量实现的操作。
8.3.1方法的申明
方法在类或结构中申明,申明时需要指定访问级别、返回 值类型、方法名称及方法参数,方法参数放在括号内,并用 逗号隔开。若括号中没有内容,表示申明的方法没有参数。 可访问一个成员的代码范围,叫做该成员的可访问区域 (accessibility domain),访问修饰符用来控制所修饰成 员的可访问区域。申明方法时需要注意访问修饰符用以控制 方法的存取限制。在此介绍C#中有5种不同级别的修饰符。 分别是public 、 private、protected、internal,
对类修饰符的说明: new:在派生类时,若子类中有与其父类同名的成员, 需要在声明子类的同名成员时,在返回值类型前加new关 键字。
class lee1 { public string GetStr()
{
} }
9 结构和类
class lee2:lee1 { public new string GetStr() {
9 结构和类
个单元,并采用适当的方式控制数据的存取,以及数据 的存取权限。
class MyClass1
{
private int x=0; private int y=0;
public int X //定义属性
{ get {return x;}
set{x=value;}
9 结构和类
}
public int Y { get{return y;} set{y=value;} } } class MyClass2 {
结构是一种值类型,用于封装一组相关的变量,结构中 可以包含构造函数、常量、变量字段、方法和属性、运算 符、事件和嵌套类型。 结构具有以下特点: 结构是值类型;结构作为方法的参数时, 需通过传值 方式传递,而非引用方式传递;结构的实例化可以不用 new运算符;结构可以申明构造函数,但需要带参数;一 个结构不能从另一个结构或类继承,所有的结构都继承自 System.ValueType,而后者继承自System.Object; 结 构可以实现接口; 在结构中不能初始化实例字段。
相关文档
最新文档