《C#从入门到精通 第9章 主流软件开发方法——面向对象

本文详细介绍了C#中的面向对象编程思想,包括对象的概念、类的定义及其成员(数据成员、属性、方法和构造析构函数)、对象的创建与使用,以及结构与类的区别。通过实例演示了如何设计Rectangle类并计算面积和周长,适合初学者理解面向对象编程的精髓。
摘要由CSDN通过智能技术生成

9.1面向对象的编程思想

一、概述:
  对象:问题空间的元素及其在解空间中的表示
  实质:通过添加新类型的对象,使自身适用于某个特定的问题
  面向对象方式是一种更加灵活,更有力的语言抽象,根据问题来描述问题
  基本特性:
    1.万物皆为对象
    2.程序是对象的集合,通过发送消息告诉彼此要做的
    3.每个对象都有自己的有其他对象所构成的存储
    4.每个对象都有其类型(每个对象都是某个类的实例)
    5.某个特定类型的所有对象都可以接受同样的消息
  对象具有状态、行为和标识,拥有内部数据(状态)和方法(行为),每个对象都在内存中有唯一的地址

9.2从特殊到一般——C#中的类

1.类的定义:
  类是对具有相同特征的事物的抽象,其中包含的具体的个体叫做对象
  语法结构:

[访问修饰符] class 类名
{
	类的主体
}

  其中,修饰符可以为public、protected、internal、private和protected internal等,访问修饰符可以省略,区别如下:
  1.public:
    对类的访问不受限制,类似于公共图书馆
  2.protected:
    对类的访问仅限于包含类或从包含类派生的类,就像单位的图书馆
  3.private:
    访问仅限于包含类,如私人图书馆
  4.internal:
    访问仅限于当前项目
  5.protected internal:
    同时拥有protected和internal的访问权
2.类的成员:
  分类:
    1.描述状态的数据成员
    2.描述操作的函数成员
  数据成员:
    类的数据成员包括字段,常量和事件,字段就是在类中定义的变量,常量是类的常量成员
    数据成员定义语法:

[访问修饰符] 数据类型 成员变量名
实例:
		public class test
		{
			protected int name;
		}

  属性成员:
    属性是字段的扩展,是一个与类或对象相关联的命名,拥有访问器,定义了读取或写入属性值时必须执行的代码,通过get{}和set{}访问器实现对类中私有字段的读/写操作
  语法格式:

[访问修饰符] 数据类型 属性名
	public string testName
{
	get{return testName;}
	set{testName=value;}
}

  方法成员:
    描述对象的行为,执行操作数据等行为
  语法格式:

[访问修饰符] 返回值数据类型 方法名(参数列表)
{
	方法体
}

  静态成员:
    静态成员是与类相关的,不依赖于特定的对象,可以直接使用,无需创建对象,直接使用,声明时使用static关键字,例如:

public static void Print();
{
	Console.WriteLine("This is a test");
}

9.3从一般到特殊——C#中的对象

一、概述:
  对象是类的实例,对象是类的个体,创建对象是从抽象到具体的过程,是将类的属性和行为实例化的过程
二、具体讲解:
  对象的创建和使用:
  语法格式:

类名 对象名 = new 类名(参数列表)
//参数列表是可选的

  对象的使用时通过访问对象中的非静态成员实现的
  语法格式:

对象名.成员名

  匿名类型和对象初始化器:
    可以实现在创建对象的同时实现对象的初始化
  语法格式:

Test testLabel = new Test() { testContent = "Hello,World" }

    如果没有定义类,却需要使用该类的对象,可以使用对象初始化器,而不需要指定类名,如:

var l = new { x = 0, y = 0 };

  构造函数:
    构造函数是类的特殊方法成员,其名称和类名相同,主要用来完成对象的初始化,使用new语句创建对象的过程实际上就是在调用类的构造函数,创建对象时使用构造函数对对象初始化,如果没有定义构造函数,系统则会使用默认的构造函数,访问一个类时,会优先执行构造函数中的语句
  析构函数:
    析构函数时对象销毁前释放所占用的系统资源的类的成员,其名字是在类名前面加上~,无参数,无返回值
应用举例:

class Test
{
		public string testContent
		{
			get{ return testContent;}
			set{ testContent = value;}
		}
		public Test()
		{
			testContent="Hello,World";
		}
		public Test(string Content)
		{
			testContent=Content;
		}
		~Test()
		{
		Console.WriteLine("用于清理资源");
		}
}

注意:
  静态构造函数用于初始化静态字段成员,举例:

public static string Content;
static Test()
{
	Content="Hello,World";
}

参数传递:
  定义方法时声明的参数时形式参数,传递的值是实在参数,传递参数类型分为值传递和引用传递
  值传递:
    系统默认的参数传递方式,传递的值是一个副本,对实在参数无影响
  引用传递:
    把实在参数的地址赋予形式参数,二者指向同一个内存单元
举例:

private void Swap(ref num1, ref num2)
{
		//语句块
}
testContent.Swap(ref num1, ref num2);

  注意:
    使用ref传递时,无论定义还是调用都要使用ref关键字,引用传递还可使用out关键字,二者区别在于ref关键字要求参数在传递前必须初始化,而out无要求
  拓展:
    out传递参数尽管不需要初始化,但是要求在方法返回前对其传递的参数赋值,换而言之,out类型参数传递提供了一种让方法返回多个值的方式

9.4结构与类

一、概述:
  结构可以看作轻量的类,封装小型的相关变量组
二、具体讲解:
  结构的定义和使用:
    使用struct关键字,成员可以是常量,变量,构造函数,方法和属性等
  语法结构:

<访问修饰符> struct 结构名
{
		结构体定义;
}

  注意:
    结构中只能定义含有参数的构造函数,对于数据字段不能赋值,否则出错
  结构和类的区别:
    1.结构是值类型,类是引用类型
    2.结构的构造函数和类的和构造函数不同,结构不能使用无参数的构造函数,结构成员会自动初始化其默认值
    3.结构中的实例字段成员,不能在声明时初始化
    4.声明了结构类型后,可以使用new运算符创建对象,也可以不使用new,但对象在初始化前不可用
    5.结构不支持继承

9.5分布类

一、概述:
  某些情况下,一个类、结构或者接口需要放在几个文件中处理,编译时再将其组合成一个完整的类
  适用情况:
    1.类型特别大,不适宜放在一个文件中
    2.一个类型中的部分代码是自动化工具生成的代码,不宜与自己的代码混在一起
    3.需要多个人编写一个类
  注意:
    分布类只是一个语言层面的编译处理,处理分布类由编译器完成,不影响最后代码的执行
二、具体讲解:
  C#分布类的定义是在class的前面添加关键字partial,例如:

public partial class test
{
		public string Content;
		public void SetContent(string Content_in)
		{
				Content=Content_in;
		}
}

  在分布类中还可以声明分布方法,例如:

public partial class test
{
		public string Content;
		public void SetContent(string Content_in)
		{
				Content=Content_in;
		}
		partial void Reset();
}

注意:
  分布方法隐式为private修饰符,不可使用public,不可有返回值

9.6命名空间

一、概述:
  C#程序是利用命名空间组织起来的,类似于一个城市被划分为许多个区
二、具体讲解:
  声明命名空间:
    命名空间是.NET避免名称冲突的一种方式,定义相同的一个类,只要不在同一个项目内就不会造成名称冲突,使用namespace来声明命名空间,语法格式:

namespace 定义的命名空间名称
{
		命名空间体
}

注意:
  命名空间可以相互嵌套,如果没有显式提供命名空间,默认使用项目名作为命名空间
  导入命名空间:
    使用using关键字,语法结构:

using 命名空间名称

注意:
  如果命名空间含有相同名称的类,在导入时需要指定具体的路径,如:

using System.Windows.Forms;
……
MessageBox.Show("Hello,C#");

实战练习:

  编写一个控制台应用程序,实现以下功能:
    1.设计一个Rectangle类,提供length,width字段计算面积和周长的两个方法,并使用Main方法来测试程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值