C#编程基础(下)第一课—扩展内容1:C#中类的定义与语法、类的属性、方法、对象

版权声明:王迪 https://blog.csdn.net/dnruanjian/article/details/86647276

知识点: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方法攻击剑豪,

此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能. '''

=======================这里是结束分割线=============================

猜你喜欢

转载自blog.csdn.net/dnruanjian/article/details/86647276