当前位置:网站首页>【Unity入门计划】C#与Unity-了解类和对象
【Unity入门计划】C#与Unity-了解类和对象
2022-07-29 08:56:00 【flashinggg】
目录
由于学习C#是为Unity做准备的,因此对类和对象仅作简单的学习记录。
1 面向对象编程的概念
只要接触到了C#就一定听到过这句话“C#是面向对象的编程语言”,那么到底什么是面向对象的编程?
面向对象编程——OOP(Object-Oriented Programming),指的是在编程时将任何事物都看作一个对象来描述,正因如此,面向对象编程可读性更高,理解起来也更加容易,这就是为什么会说跟C++相比C#学起来会更加简单吧。
2 C#面向对象的三大特性
2.1 封装
封装,即把一个或多个项目封闭在一个包中,隐藏对象的内部状态和功能的细节信息,提供一些公共元素进行访问。还是用手机举例子:通过手机的一些按键就可以进行一些操作,但是我们不知道手机内部硬件是怎样实现这些操作的。封装可以让使用者不必关心对象是如何实现的,只须知道对象的用法。
抽象和封装通常被一起提及,实现封装后,提供的一些抽象的公共元素——类、方法等实现了信息的可视化,然而用户对这些信息的访问权限也不全是公开的。
访问修饰符
C#封装利用访问修饰符来实现对使用者访问权限的设置,C#有以下访问修饰符(如果没有限定,默认为private)
- public——公有的,类的成员可以从类外被访问
- private——只能在类内被访问
- protected——只有该类对象及其子对象可以访问
- internal——同一程序集的对象可以访问
- prtected internal——本类、派生类或包含该类的程序集可访问
2.2 继承
C#的继承主要体现在类之间的继承,通过继承我们可以根据一个类来定义另一个类,提高代码的重用性。例如以下代码中
public class MyPlayer : MonoBehaviour
{
...
}创建了一个新的类MyPlayer,它继承了Unity脚本API中的基础类MonoBehaviour,也就意味着继承了这个基础类的数据成员和成员函数,就不需要重复编写了。
这个关系中,MyPlayer称为派生类,MonoBehaviour称为基类。
2.3 多态
同一个行为具有不同的表象形式,或者说以不同方式实现继承属性或者方法,这就叫做多态。在C#中通过类的继承或接口来体现多态这一特性。
3 对象
简单了解一下什么是对象:对象包括属性和方法
- 属性——对象的固有特性
- 方法——对象的行为方法
假设我们有一个手机对象,那么手机的款式、型号等就是它的属性,而用手机打电话、发短信等操作就是它的方法。
4 类
C#中一切都与类和对象及其属性和方法有关,当你定义了一个类,就定义了一个数据类型的蓝图。举个例子:一个学生是一个“类”,而一位叫小明的学生,他就变成了一个“对象”了,类更像是一个概念,而对象则是将类实例化成了一个有具体信息的个体。
类的静态成员
类的成员分为实例成员和静态成员。
静态成员——可以使用static关键字把类成员修饰成静态的。
当一个成员被声明为静态之后,无论有多少类的成员被创建,他们只会有一个该静态成员的副本。 静态变量用于定义类中的常量,无需创建实例可以直接调用类来获取,可在外部也可在内部定义。
5 类&Unity组件
在使用类的静态方法或属性时,不需要将类实例化,除此之外所有C#中的类都必须实例化成对象后才能使用。
5.1 类在Unity的使用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class MyPlayer : MonoBehaviour
{
public string myName;
public Cat cat;
void Start()
{
cat.Print();
}
}
[Serializable]
public class Cat
{
//数据成员
public string name;
public int age;
/*//构造函数
public Cat(string name, int age)
{
this.name = name;
this.age = age;
}*/
//成员方法
public void Print()
{
Debug.Log($"这只小猫叫{name},它今年{age}岁了");
}
}
输入name和age后,ctrl+p的运行结果

5.2 类对象在属性窗口的可视化
在Unity中,我们都知道如果想要将某个定义的变量可视化,加上public即可,例如

但要想给脚本中定义的类对象可视化,仅加上public是不够的,还需要在定义那个类的前面加上

[Seralizable] 是在命名空间System下的


如此,该类创建出来的对象加上public就能可视化在属性窗口了。
边栏推荐
- QT version of Snake game project
- Compile and install Apache for rocky Foundation
- Google browser cross domain configuration free
- How to quickly experience oneos
- 2022 Teddy cup data mining challenge C project and post game summary
- Osg3.6.5 failed to compile freetype
- 数学建模——微分方程
- LeetCode刷题(6)
- Source code compilation pytorch pit
- Use disco diffusion to generate AI artwork in moment pool cloud
猜你喜欢

Clickhouse learning (III) table engine

数学建模——聚类

ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO)

Quaternion and its simple application in unity

C language watch second kill assist repeatedly

Osg3.6.5 failed to compile freetype

C language -- 22 one dimensional array

2022 question bank and answers of operation certificate examination for main principals of hazardous chemical business units

ADB common command list

Basic shell operations (Part 1)
随机推荐
RPC and rest
Arfoundation starts from scratch 5-ar image tracking
Clickhouse learning (III) table engine
AI application lesson 1: C language Alipay face brushing login
QT learning: use non TS files such as json/xml to realize multilingual internationalization
Normal visualization
Regular expression verification version number
Sword finger offer 32 - ii Print binary tree II from top to bottom
数学建模——聚类
Osgsimplegl3 example analysis
Source code compilation pytorch pit
Flask reports an error runtimeerror: the session is unavailable because no secret key was set
Use disco diffusion to generate AI artwork in moment pool cloud
State compression DP
md
C language -- 22 one dimensional array
Complete knapsack problem from simplicity to ultimate
Eggjs create application knowledge points
C language calculates the length of string
SAP ooalv-sd module actual development case (add, delete, modify and check)