知识点:C#中类的定义与语法、类的属性、方法、对象
1、C#中类、对象、属性、方法之间的关系
- 对象:现实世界中的实体(世间万物皆对象)
- 类:具有相似属性和方法的对象的集合
- 对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)
- 面向对象程序设计的特点:封装 继承 多态
相互关系:类是对象的抽象,对象是类的实例,类是一种抽象的分类,对象则是具体事物。
举例思考:如如果车是一个类,某个人的一辆奔驰车就是一个对象,车的颜色质量就是它的属性,启动、停止这些动作则可以定义为车的方法。
2、类的定义和语法
2.1 类的定义
当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量成为类的成员。
语法:类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式:
[访问修饰符] class 类名
{
//类的主体(包含属性和方法的声明)
}
访问修饰符:指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal(可访问域定义范围内),成员的默认访问标识符是 private。
class:是定义类的关键字,本身就是类的意思。
类名:类名由我们定义,起名字需要遵守一些规则。(类名称首字母记着要大写,多个单词则各个首字母大写。)
类的主体:大括号中间就是属性和方法的声明了。
2.2 类的成员(类的组成)
1)类中的数据和函数都称为类的成员。类的成员可以分为两类:
- 类本身所声明的。
- 从基类中继承来的。
如果在类声明中没有指定基类,则该类将继承System.Object类的所有成员。
2)类的成员类别:
注意:C#中的类成员可以是任意类型,包括数组和集合。英文中 “字段”是英文单词“Field”,有时会被翻译成“域”,和“字段”是同一概念。
3)类的成员的访问级别
- public:声明为公有成员,访问不受限制。公有成员提供了类的外部界面,允许类的使用者从外部进行访问。
- protected:声明为受保护成员,只能访问包含类或从包含类派生的类。受保护成员对于外界是隐藏的。
- internal:声明为内部成员,只能访问当前程序集。
- protected internal:声明为受保护的内部成员,只能访问当前程序集或从包含类派生的类。
- private:声明为私有成员,只有该类中的成员可以访问。如果在声明中没有设置成员的访问修饰符,成员会被默认为private。
2.3 类中属性的定义
属性在类中用变量来表示,我们也可以称其为:成员变量。定义方法很简单,就是我们定义变量的方法。
如,在User类中定义两个属性
public class User
{
public static string userName; //用户名
public static string userType; //用户类型
}
2.4 类中方法的定义
访问修饰符 返回类型 方法名(参数列表)
{
// 方法的主体…
}
总结:定义类的三个步骤
①定义类名
②编写类的字段
③编写类的方法
2.5 对象的创建和使用
类是概念模型,对象是实际存在的实体,具体的工作还是需要对象来完成,那么如何来创建对象呢?
(1)创建对象的语法:
类名 对象名=new 类名();
这里有一个示例:Book center=new UserBook();
说明一下:在创建类的对象时,需要使用 new 关键字;Book是我们创建的Book类,center是对象名,创建的每个对象属性值都可能不一样,后面可以给每个对象的属性进行赋值。
(2)引用对象成员
使用"."进行一下操作
①对象名.字段;(引用类的字段)
②对象名.方法名();(引用类的方法)
2.6 方法的参数
- 值参数:按值传递
- 引用参数:向方法传递实参在内存中的地址,按地址传递
- 输出参数:从方法传递回一个结果,关键字:out
- 数组型参数:参数只允许是一组数组,当方法的参数前带有params关键字时,就是带数组型参数的方法(使用引用传递)
课后练习:定义一个狗狗类,设置属性和方法,实例化狗狗对象,并调用方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("欢迎来到狗狗宠物店!");
Dog a = new Dog();//实例化一个狗狗对象
Console.Write("请输入要领养的狗狗类型:(1、聪明的拉布拉多,2、酷酷的雪纳瑞):");
a.DogType=int.Parse(Console.ReadLine());
Console.Write("请给狗狗起个名字:");
a.DogName = Console.ReadLine();
a.Show();
Console.ReadLine();
}
}
public class Dog//定义一个狗狗类
{
public string DogName; //定义狗狗类属性1:狗狗名字
public int DogType; //定义狗狗类属性2:狗狗类型
public void Show()//定义一个方法,用来进行狗狗的自我介绍
{
if (this.DogType == 1)
{
Console.WriteLine("宠物的自白:我的名字叫" + this.DogName + ",健康值是100,和主人的亲密度是0,我是一只聪明的拉布拉多。" );//this关键字,是对一个对象的默认引用
}
else if (this.DogType == 2)
{
Console.WriteLine("宠物的自白:我的名字叫" + this.DogName + ",健康值是100,和主人的亲密度是0,我是一只酷酷的雪纳瑞。" );
}
}
}
}
结果演示:
升级练习:模拟英雄联盟写一个游戏人物的类
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,
此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能. '''
=======================这里是结束分割线=============================