Learn Unity(0)——basic C# for Unity

basic C# for Unity

本篇是在学Unity之前补的C#知识,由于有C++经验,所以只整理了部分C#中和C++不同的内容。

基本知识

初步

  • Console.WriteLine()控制台输出,Console.Readline()Console.Read()控制台输入,前者回车结束,后者回车或者空格都结束

  • namespace XXX{}命名空间中是一系列的类

  • static void Main(string[] args)是在类里边的

  • 占位符是{n},n为占位符序号

可空类型

int? a = null;
int? b = 2;
double? c = new double?();

int d = a ?? 2    //null合并运算符??,如果第一个操作数为null则返回第二个操作数

数组

foreach(int i in n)可以遍历数组n中的所有元素

字符串

关于C#中的字符串,菜鸟教程给出了很好的表格总结:

http://www.runoob.com/csharp/csharp-string.html

  • C#中实例化类要用类名 实例名 = new 类名()的形式

  • Object类是所有数据类型的基类。

  • 构造函数是公有成员,析构函数前没有东西。

  • 类的静态成员不论创建多少个实例,只有一个。静态成员函数只能访问静态变量

继承

C#不支持多重继承,使用public interface 接口名定义一个接口可以使它被多重继承

多态性

abstract class创建抽象类,这种累不能实例化,其中包含抽象方法如public abstract ...,可以被继承(使用public override ...,虚方法也是这样)。抽象方法只能在抽象类内声明。

sealed可以将一个类声明为密封类,这种类不能被继承。抽象类不能密封

接口

接口默认public。类可以继承接口,在类中定义接口中的函数

命名空间

C#中的命名空间里的类名用.,不用::

正则表达式

Unity中常用的正则表达式:
http://wenku.baidu.com/link?url=oxTtgpp8Js8Nbc-AMOj4vZJ2bXAjz6w_jt3t06yiUYQewZvXnu5NPBZhrCiW7PVVlCQSv_lhid5UWMlxBBlyWJIPq2skVYKq6YMzHhPLaoq

文件输入输出

首先using System.IO,读文件基本格式为:FileStream f = new FileStream("11.txt", FileMode.Open, FileAccess.Read, FileShare.Read);写一个新文件则FileMode.Create

文本逐行读取,使用using可以自动读取后关闭StreamReader

using (StreamReader sr = new StreamReader("c:/jamaica.txt"))
{
    string line;

    // 从文件读取并显示行,直到文件的末尾 
    while ((line = sr.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

高级特性

特性Attribute

特性:传递程序中各种元素的行为信息的声明标签。在元素前方用方括号描述

规定特性Attribute

[attribute(位置参数,可选参数)]
元素

预定义特性1 - AttributeUsage

规定了特性可应用到的项目类型。

[AttributeUsage(validon, AllowMultiple = true , Inherited = false]

validon是枚举器AttributeTarget的值组合,比如ArributeTargets.Method|AttributeTargets.Propery等,后边两个布尔值

,一个是多用性,一个是继承性

预定义特性2 - Conditional

标记了一个条件方法的执行依赖于预处理标识符,会引起方法调用的条件编译。

[Conditional(标识符)]

预定义特性3 - Obsolete

标记了不应被使用的程序实体,通知编译器丢弃某个特定的元素。

[Obsolete(消息字符串, true)]这个属性后边的项目将被标记为过时的。第一个参数字符串描述了过时的原因和替代使用,第二个参数可以缺省,默认值为false,如果为true则如果程序中调用了过时的项目,则会报错。

创建自定义特性

自定义特性的声明应该派生自System.Attribute类。

反射Reflection

获取属性信息,该类型在System.Reflection命名空间中。

System.Reflection.MemberInfo info = typeof(MyClass);    //实例化一个反射类的MemberInfo对象,获取MyClass类的属性
object[] attributes = info.GetCustomAttributes(true);    //将类属性放入数组
//使用info.GetMethods()可以返回类中的方法组成的数组,进而可以获取方法的属性

属性Property

属性是类、结构、接口的命名成员。类或结构中的成员变量或者方法称为域,属性是它的扩展,使用访问器让私有域的值可被读写。

访问器

// 声明类型为 string 的 Code 属性

#声明为string的Code属性
public string Code
{
   get    //get访问器
   {
      return code;
   }
   set    //set访问器
   {
      code = value;
   }
}

同样地,抽象类拥有抽象属性,在派生类中再实现:

public abstract string Name
{
    get;
    set;
}

索引器Indexer

允许一个对象可以像数组一样被索引。

public string this[int index]    //类型 this [索引类型 类型名]
{
    get
    {
        //设置n[index]的返回值
    }
    set
    {
        //设置n[index]的赋值
    }
}

索引器可以被重载

委托Delegate

类似C++中的函数指针,是对某个方法的引用。delegate 返回类型 委托名 (参数列表),可以用于引用任何参数列表形同的方法。实例化也是通过new来创建,传入的参数像调用方法一样,但不带参数:委托名 实例名 = new 委托名(方法名)

相同类型的委托对象可以用+/-运算符合并或移除。使用这个特点可以创建一个调用委托是所调用的方法的列表,成为委托的多播或组播multicasting,依次调用列表中的方法。

事件

发布器:包含事件和委托定义的对象;订阅器:接收事件并处理

在类内部声明事件,先声明该事件的委托类型。事件生成时会调用委托

public delegate void MsgHnd(string status);

public event MsgHnd MsgLog;

集合

动态数组ArrayList

和C++中的vector容器有些像,语法是:

ArrayList a = new ArrayList();    //创建动态数组
if(!a.Contains(n))    //判断n是否在a中
    a.Add(n);    //压入数据
int si = a.Capacity;    //容量
int num = a.Count;    //元素数量
a.Remove(n);    //删除第一个出现的n
a.RemoveAt(0);    //删除a[0]
a.Sort();    //从大到小排序

哈希表

Hashtable ht = new Hashtable();哈希表的操作和动态数组类似,不再赘述。

泛型

泛型委托声明delegate T 委托名<T>(T n);

匿名方法

使用匿名方法来创建委托实例

delegate void MsgHnd(int n);
...
MsgHnd msglg = delegate(int x);
{
    ...
};

就可以使用匿名方法创建实例和调用委托。

线程

Unity中提供了另外的方法来实现,具体涉及到的时候再整理,因此这里不再赘言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值