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<int> i = new Nullable<int>(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# 中定义方法:

<Access Specifier> <Return Type> <Method Name>(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<float> list1 = new GenericList<float>();
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>(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

个人笔记型博客,仔细学习可移步C#官方文档或菜鸟教程-C#教程。

转载于:https://www.cnblogs.com/mthz/p/unity0.html

Unity游戏开发之C#快速入门相关推荐

  1. Unity游戏开发之UGUI设计——制作一个游戏内置的控制台界面/作弊菜单(详细流程,附代码)

    功能说明 今天要实现的功能就是老滚5.GTA.P社等游戏里面那个按下某个按键就能开启调试(开挂)的控制台组件.老规矩,直接上实际效果图: 如上图所示,输入输出文本的控制台本质上就是一个游戏中内嵌的命令 ...

  2. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  3. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

  4. SpringBoot开发之Spring Boot入门

    SpringBoot开发之SpringBoot入门 一.Spring Boot概述 1.什么是Spring Boot 2.Spring Boot的优点 二.第一个Spring Boot应用 1.创建S ...

  5. 游戏开发之U3D插件EasyTouch5.x使用

               游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...

  6. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  7. 游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟)

    游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟) 介绍 开发环境 游戏原理 文件结构 详细操作 全部代码 介绍 拓展什么的都没有,真正 ...

  8. BCSP-玄子前端开发之JavaScript+jQuery入门CH13_表单校验

    BCSP-玄子前端开发之JavaScript+jQuery入门CH13_表单校验 4.13 表单验证 4.13.1 为什么要表单验证 保证输入的数据符合要求 减轻服务器的压力 [外链图片转存失败,源站 ...

  9. 游戏开发之U3D实现技能图标冷却的效果

    游戏开发之U3D实现技能图标冷却的效果 --本次使用的NGUI插件.     制作思路:NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使 ...

最新文章

  1. “传统”遥感遇上AI,会产生怎样的效果?
  2. CRUD之delete操作
  3. 将ejs转为html,Node.js Express Web应用框架ejs修改为html
  4. Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
  5. Console控制台的正确打开方式
  6. 模拟noj——打扑克
  7. C# wpf中DataGrid 支持汇总行
  8. C++和Java的属性访问和方法调用 效率比较
  9. 大厂门槛:技术力+领导力,你达标了吗?
  10. 零售业有效利用物联网的几种方法
  11. Web 设计与开发终极资源大全
  12. 人脸方向学习(五):Face Recognition-ArcFace解读
  13. 【AppScan闪退】
  14. 【最新】解决Github网页上图片显示失败的问题
  15. IAU SOFA 软件包介绍
  16. 【历史上的今天】7 月 1 日:分时系统之父诞生;支付宝推出条码支付;世界上第一支电视广告
  17. 私服上传出现Failed to transfer file ...... 400错误
  18. 【MySQL学习笔记】MySQL原理---单表查询
  19. 全国计算机一级考试用什么版本,计算机等级考试用的是那个版本的office?
  20. JS 判断input输入框日期时间格式是否符合YY-MM-DD HH:MM:SS和是否符合实际日期规范方法以及SQL时间日期格式转化存储

热门文章

  1. Visual Studio Code 常用插件整理
  2. a 中调用js的几种方法
  3. 浅谈PVID和VID区别
  4. asp.net与JAVASCRIPT函数的相互调用
  5. VisualC++2010系列课程
  6. 服务器控件开发之基本概念
  7. Activity Monitor 闪退 无法进入睡眠
  8. 简易有效Api接口防攻击策略
  9. 改变世界的七大NLP技术,你了解多少?(上)
  10. 一、Java语言基础(4)_方法和数组——数组