Unity游戏开发之C#快速入门

简介: Unity游戏开发之C#快速入门C#是微软团队在开发.NET框架时开发的,它的构想接近于C、C++,也和JAVA十分相似,有许多强大的编程功能。个人感受是C#吸收了众多编程语言的优点,从中可以看到C、C++、Java、Javascript、python的影子,设计思想都是相通的(过段时间一定要看看设计模式),对比迁移地学习基本只需要记关键字、语法和包的用法。

Unity游戏开发之C#快速入门
C#是微软团队在开发.NET框架时开发的,它的构想接近于C、C++,也和JAVA十分相似,有许多强大的编程功能。
个人感受是C#吸收了众多编程语言的优点,从中可以看到C、C++、Java、Javascript、python的影子,设计思想都是相通的(过段时间一定要看看设计模式),对比迁移地学习基本只需要记关键字、语法和包的用法。我是为了unity游戏开发课程学的,不是很深入,某些细节可能也没有涉及到。 就先复习了以前学C++、java的笔记,然后对照着简单学了C#,会重点学unity中用到的包。

1.C#程序结构
C# 中的关键组织结构概念包括程序、命名空间、类型、成员和程序集。
一个C#版HelloWorld直观感受一下。

using System; //包含命名空间
namespace HelloWorldApplication //声明一个命名空间
{
class HelloWorld //类声明
{

  static void Main(string[] args)           //Main入口函数
  {
     /* 我的第一个 C# 程序*/
     Console.WriteLine("Hello World");  //输出
     Console.ReadKey();
  }

}
}
与 Java 不同,文件名可以不同于类的名称。

2.数据类型、类型转换
值类型 (从System.ValueType中派生)
bool、byte、char、decimal、double、float、int、long、sbyte、short、uint、ulong、ushort、结构体struct、枚举enum
引用类型
引用类型不包含存储在变量中的实际数据,而是包含对变量的引用。
内置的引用类型有:object、dynamic 和 string。
自定义的有:类class C {...}、接口interface I {...}、委托delegate int D(...)、数组int[] 和 int[,]。
对象类型变量的类型检查是在编译时发生。
动态类型变量的类型检查是在运行时发生。
@引号的字符串会将转义字符()当作普通字符,可以任意换行,换行符及缩进空格都计算在字符串长度之内。
字符串的占位符为{},如:String.Format(“{0},{1}”,c,d);
指针类型
指针类型变量存储另一种类型的内存地址。
例如:char* cptr;
可空类型
null是引用类型变量的默认值,null不允许被赋给值类型的变量,但有时我们希望值类型的数据可以为null,就有了可空类型。

int a = null; // 非法
int? a = null; // 合法,可空类型
Nullable i = new Nullable(3);//可空类型
合并运算符(??)定义了一个预设值,以防可空类型的值为null。
如:

double? num1 = null;
double num3 = num1 ?? 5.34; // num1 如果为空值则返回 5.34
类型转换如:i = (int)d;i.ToString();s.ToBoolean();
C#的运算符,判断、循环语句和C++的语法基本一致,不做过多说明。

3.方法、类、接口、泛型
一个 访问修饰符 定义了一个类成员的范围和可见性。
C# 支持的访问修饰符如下所示:
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。

C# 中定义方法:

(Parameter List)
{
Method Body
}
C#中的类和java是很像的,不过继承的时候用的:,而不是extends。
类中也有构造函数、析构函数、静态成员(static)。

class Line
{

  private double length;   // 线条的长度
  public Line()  // 构造函数
  {
     Console.WriteLine("对象已创建");
  }
  ~Line() //析构函数
  {
     Console.WriteLine("对象已删除");
  }

  public void setLength( double len )
  {
     length = len;
  }

}
类的继承:

class <派生类> : <基类1>,<基类2>,...
{
...
}
接口的继承和实现也是用的冒号:

interface IMyInterface : IParentInterface
{
}
class InterfaceImplementer : IMyInterface
{

//接口中方法的实现

}
泛型:
using System.Collections.Generic;
GenericList list1 = new GenericList();
C#的泛型和C++模板类似,但也有不同
泛型可以通过使用 where 上下文关键字指定约束。

4.域(Field)、属性(Peoperty)、索引器(Indexer)
域和属性的区别
区别 属性 域
逻辑性 逻辑字段,在改变字段时
能改变对象的其他一些状态 不经过逻辑处理
存储性 不占用实际内存 占内存空间及位置
访问性 由get、set访问器决定读写属性 由访问修饰符决定
安全性 增加了数据的安全性 不太安全
为了实现对字段的封装,保证字段的安全性,而产生了属性,其本质是方法,通常是配合使用的,如下:

class Student
{

  private string name = "not known";

  // 声明类型为 string 的 Name 属性
  public string Name
  {
     get
     {
        return name;
     }
     set
     {
        name = value;
     }
  }

}
索引器
索引器(Indexer)允许一个对象可以像数组一样被索引。
和属性类似,可使用 get 和 set 访问器来定义索引器,而索引器返回或设置对象实例的一个特定值。

5.委托、匿名函数、事件
委托
委托可以理解为函数指针,是对函数原型的包装。
但相比于函数指针,委托面向对象,类型更安全,有多播的功能。
通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。

例如:

申明委托:delegate void TestDelegate(string s);
  可以再任何地方声明委托,可以带访问修饰符。
  委托不关心引用的方法的类,只关心引用的方法是否与委托有相同的参数和返回类型。
实例化委托:TestDelegate testdelA = new TestDelegate(M);
  用某个方法实例化这个委托,也就是说,使函数指针指向一个方法。
调用委托:testdelA("Hello");
委托可以多播
  委托间可以使用+、-来组合、移除,委托判等是根据它引用的方法判断。
泛型委托:delegate T NumberChanger(T n);
匿名函数与Lambda表达式
匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。
匿名方法没有名称只有主体,不需要指定返回类型,它是从方法主体内的 return 语句推断的。
匿名函数与委托的使用步骤相同,实例化时格式不同,格式如下:
委托名 实例变量 =delegate(形参列表){方法体};

Lambda表达式也是匿名函数,语法更加简洁:
(参数列表) => {方法体}

事件
事件使用 发布-订阅(publisher-subscriber) 模型。
在类的内部声明事件,首先必须声明该事件的委托类型。例如:
public delegate void BoilerLogHandler(string status);
然后,使用 event 关键字声明事件本身:
public event BoilerLogHandler BoilerEventLog;

6.C#常用类库
System.Collections
集合(Collection)类是专门用于数据存储和检索的类。常用的有:

集合类 常用方法
动态数组
ArrayList Add(item)、Clear()、Contains()、IndexOf()、
Remove()、Sort()、Reverse()
哈希表
Hashtable Add(key,value)、Clear()、Remove(key)、
ContainsKey(key)、ContainsValue(value)
堆栈
Stack Clear()、Contains()、Peek()、 Pop()、PushToArray()
队列
Queue Clear()、Contains()、Dequeue()、
Enqueue()、ToArray()、TrimToSize()
点阵列
BitArray
排序列表
SortedList
原文地址https://www.cnblogs.com/mthz/p/unity0.html

相关文章
|
4月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
36 0
|
4月前
|
存储 C# 图形学
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
47 1
|
4月前
|
搜索推荐 算法 C#
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
46 1
|
4月前
|
程序员 C# 图形学
【Unity 3D】C#中条件语句if else switch的讲解
【Unity 3D】C#中条件语句if else switch的讲解
49 1
|
3月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
71 2
|
3月前
|
vr&ar 开发工具 图形学
Unity引擎:收费模式和服务升级,为游戏开发带来更多可能性
Unity引擎:收费模式和服务升级,为游戏开发带来更多可能性
|
4月前
|
JSON C# 图形学
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
48 0
|
4月前
|
网络协议 Unix Linux
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
41 0
|
4月前
|
数据可视化 C# 图形学
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
64 0
|
4月前
|
SQL 关系型数据库 MySQL
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
92 0