Learn Unity(0)——basic C# for Unity
2016-04-02 19:43
489 查看
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中提供了另外的方法来实现,具体涉及到的时候再整理,因此这里不再赘言。相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法