C#可视化编程基础-(类与对象)
前言
此章的主要思想是了解程序设计的思想中的“面向对象”
在程序设计中,需要处理的事物通常会非常复杂,此时也需要对处理的事物进行分析和总结,抽象出事物的特性和行为,封装成相应的类,最后实例化对象进行操作,这种程序设计的思想,我们称之为"面向对象"(Object Oriented,简称OO)
文章目录
一、类与对象的基本概念
1.抽象的概念
抽象是指对具体问题进行概括,抽取公共特性并加以描述的过程。
抽象的过程是对问题进行分析和认识的过程
现实中的一切事物皆为对象
举例:
对人类,动物类和汽车类的抽象总结:
1.人类
(1)数据抽象(共同的特征):姓名、性别、年龄和身高等。
(2)行为抽象(共同的行为):吃饭、睡觉和行走等。
2.动物类
(1)数据抽象(共同的特征):名称、主食和栖息地等。
(2)行为抽象(共同的行为):发出叫声、行走和觅食等。
2.汽车类
(1)数据抽象(共同的特征):品牌型号、排量和颜色等。
(2)行为抽象(共同的行为):启动、加速和刹车等。
注:数据抽象是找出需要操作的数据,而行为抽象则是指如何对这些数据进行操作
2.类与对象
(1)类的概念
类是对事物的一种抽象定义,将抽象之后的特征和行为有机地结合起来便构成了类,类是具有共同特征和行为的一类事物的统称
如上图所示,在人科下有:黑猩猩、人类、直立人等多个分支对象。在猴科下有:猕猴、懒猴、狒狒等多个分支对象。那么也就可以视为,人科是一个类,而在人科类中有黑猩猩、人类、直立人等多个对象。这些对象都有共同的特征以及共同的行为,例如直立人和人类有着极为相似的外形,并且拥有族群意识和与人类极为近似的繁殖方式。故将直立人和人类划分在一个生物科中。
而人科、猴科以及其他拥有相似特征及行为的科属都包含在灵长类这个大类别中,所以可以将灵长类视为一个大类,而人科、猴科以及其他拥有相似特征及行为的科属视为对象。
(2)类的定义
在面向对象编程思想中,具有一系列共同特征和行为的通用类型被称之为类,类是现实世界中一组具有相同属性和方法的对象的集合,其中属性用于描述对象所具有的特征,方法用于描述对象的行为
(3)对象的定义
对象是指:某种可为人所感知的物质或思维、感受或动作所作用的物质或精神体。
例如咱们手中的香烟这个具体的个体可视为对象,咱们用于工作学习的电脑可视为对象,早起用于刷牙的牙刷也可视为对象,也就是说,万物皆为对象。
面向对象编程中,对象是类的实例,是具有特征(属性)和行为(方法)的数据结构。对象是独一无二的具体个体,用于描述现实世界的某个事物,将现实世界的事物模型化
(4)类与对象的关系
类是对一系列对象的抽象,提取了这一系列对象的共同特征以及共同行为,并且对象本身是具体的、客观存在的。
例如:书本类是表述所有书籍的类别,它的概念是抽象的。而我手中的《刑法学讲义》则是实体书籍,它的概念是具体的,客观存在的,并且它属于书本类这个类别中,是类别中的一个对象。
二、C#中类与对象的实际应用
1.C#类的实际定义
C#是一种面向对象编程的语言,所以类是组成C#应用程序的基础。C#中的类主要由字段属性和方法组成。
C#定义类的语法如下:
[访问修饰符] class 类名{
类的字段声明;
类的属性声明;
类的方法声明;
}
注:中括号"[]"中的内容表示可以省略,如果省略表示取默认值,并且定义类时需要使用"class"关键字进行标注表示此段代码定义的是一个类
举例:
public class NewClass
{
string Name; //姓名
int age; //年龄
double wages; //工资
//定义count方法,用于给员工提薪
public static double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
2.对象的使用
(1)实例化对象
在类的定义完成后,不能直接进行操作。因为类的概念是抽象的,需要实例化类来创建类的具体对象,然后对具体对象类进行操作
实例化对象语法:
类名 对象名 = new 类名();
举例:
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
static void Main(string[]args)
{
//实例化对象NewClass,对象名为newClass
NewClass newClass = new NewClass();
}
注:实例化对象的过程,就是为对象在内存中分配存储空间,并确定对象特征的过程。对抽象概念的类进行实例化,就创建了具体的对象。而关键字new,则是用于在内存中开辟空间
(2)访问类的字段
首先需要明确的是,字段是用于描述事物特征的。在编程过程中,事物特征等同于字段中存储的数据。对象实例化后,可以通过直接访问字段来获取或修改对应的特征值
访问字段语法:
对象名.字段名;
例如:
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
static void Main(string[]args)
{
//实例化对象NewClass,对象名为newClass
NewClass newClass = new NewClass();
//调用类中的Name字段并赋值
newClass.Name = "张三";
newClass.age = 18;
newClass.wages = 1800.23;
//直接访问实例化对象newClass中的Name字段并输出
Console.WriteLine(newClass.Name);
}
(3)调用类的方法
类的方法的调用方式和字段的调用方式非常类似。在实例化对象后,使用对象名.方法名进行调用即可
语法:
对象名.方法名(实参列表);
举例:
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
static void Main(string[]args)
{
//实例化对象NewClass,对象名为newClass
NewClass newClass = new NewClass();
//调用类中的Name字段并赋值
newClass.Name = "张三";
newClass.age = 18;
newClass.wages = 1800.23;
//调用类中的count方法进行提薪操作
Console.WriteLine(newClass.count(newClass.wages));
}
三、命名空间的概念
1.命名空间的定义
命名空间(namespace)用于将具有相同功能的相似类从逻辑上进行分组,提供了一种组织相关类和其他类的方式,是一种逻辑组合,不是物理组合。可以认为命名空间是电脑中存放文件的文件夹,如果在电脑中存放两个相同名称的文件时,放在同一个文件夹显然是行不通的,所以解决方案就是将两个文件放在两个不同的文件夹内即可完成上述需求,所以,命名空间的空间各自独立,可存放名称相同功能类似的文件
并且,在C#中命名空间分为两种不同形式
- 系统命名空间
- 自定义命名空间
系统命名空间是在.NET框架中预定义好的系统命名空间
自定义命名空间则是在实际开发过程中依据业务逻辑或需求,自己独立定义的命名空间
(1)自定义命名空间
自定义命名空间是在实际开发过程中依据业务逻辑或需求,自己独立定义的命名空间。
自定义命名空间语法如下:
namespace 命名空间名
举例:
namespace Demo_Day1
{
//自定义命名空间Demo_Day2,用于存放与Demo_Day1名称功能冲突的NewClass类
namespace Demo_Day2
{
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
}
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
}
(2)系统命名空间
.NET框架中提供了许多已经定义好的命名空间,这些命名空间称之为系统命名空间,最常用的命名空间如下:
命名空间名 | 说明 |
---|---|
System | 根命名空间,提供最基本的操作 |
System.Data | 处理数据存取和管理 |
System.IO | 管理对文件、流的同步和异步访问 |
System.Windows | 可视化编程中基于窗体的处理 |
System.Collections | 包含对集合进行处理的接口和类 |
2.命名空间的使用
两个放置在不同命名空间的类,如果需要相互操作,则有两种方式进行访问:
- 导入命名空间访问
- 使用完全限定名访问
(1)导入命名空间访问
导入命名空间访问需要使用using关键字进行导入,语法如下:
using 命名空间名
举例:
namespace Demo_Day1
{
//自定义命名空间Demo_Day2,用于存放与Demo_Day1名称功能冲突的NewClass类
namespace Demo_Day2
{
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
}
}
-----------------------------------------------------------------------------------------------------
//使用using调用Demo_Day1命名空间中的Demo_Day2命名空间中的NewClass类
using Demo_Day1.Demo_Day2
namespace Demo
{
static void Main(string[] args)
{
NewClass newClass = new NewClass();
}
}
(2)使用完全限定名访问
使用完全限定名访问的方法就是在指定类时带上完整的命名空间,语法如下:
命名空间名.类名
举例:
namespace Demo_Day1
{
//自定义命名空间Demo_Day2,用于存放与Demo_Day1名称功能冲突的NewClass类
namespace Demo_Day2
{
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
namespace Demo_Day3
{
public class NewClass
{
public string Name; //姓名
public int age; //年龄
public double wages; //工资
public double count(double wages)
{
wages += wages * 1.2;
return wages;
}
}
}
}
}
-----------------------------------------------------------------------------------------------------
//使用using调用Demo_Day1命名空间中的Demo_Day2命名空间中的NewClass类
using Demo_Day1.Demo_Day2
// using Demo_Day1.Demo_Day3 在同一个命名空间有同名类时,不能同时使用using进行声明
namespace Demo
{
static void Main(string[] args)
{
//操作Demo_Day2命名空间中的NewClass类
NewClass newClass = new NewClass();
//如果需要同时对Demo_Day2、Demo_Day3同时进行操作,就需要使用完全限定名精确指定
Demo_Day1.Demo_Day3.NewClass newClass2 = new Demo_Day1.Demo_Day3.NewClass();
}
}