因为课题的原因,现在还要先用一下Unity,Github上的源码个个如此炫酷以至于没有c#基础的我根本看不懂……
买了一本c#入门对着敲代码,现在多少懂一点了。比如下面这一段对泛型类型的编写。
using System; using System.Collections.Generic; namespace CustomGenericType { struct Point<T> { T x; T y; public Point(T x, T y) { this.x=x; this.y=y; } public T X { get {return x;} set {this.x=value;} } public T Y { get {return y;} set {this.y=value;} } //这个里面value还是第一次见,大概就是说把setter的参数拿来用 public void Print() { Console.WriteLine("({0},{1})",x,y); } } }
好吧我根本不懂啥叫泛型类型,但是感觉这个东西就是做一个模板,里面两个变量,这两个变量先不声明什么类型,反正啥类型都行,所以就叫泛型是吧?
里面有几点是之前没看到过的
- Point<T>以及下面的 T x; T y;因为是泛型所以也没什么可说的了,就把T当做接受类型的一个坑吧
- Point(T x, T y)这个应该就是Point在外面用到的constructor吧,比如如果写Point(int a, int b)?其实不是这么写的,例程里面写的是
Point<double> b=new Point<double> (12.3, 244.4); //对了,这里直接写小数,后面没跟f,所以是double类型
- getter and setter,呃,也是啊,getter and setter肯定不止objective c才有啊…… 不过比较有意思的是X和Y是大写。然后如果要在外面用到get或者set的话呢:
a.x=2; //这样子是不行的,会报错说inaccessible due to protection level. a.X=2; //这样子就ok了,因为这里的X是之前声明好的一个Setter and getter
总之呢这一段代码敲完有几个收获
- c#也是有getter and setter的(废话),而且简单粗暴的读取和改写一个class里面的变量是非常不绅士的,通过Getter and setter来吧。
- 改变大小写也是一个给getter and setter起名字的好办法呢
- 泛型这个东西,还真是很有意思呢,这样一套模板建起来就可以根据实际需要反复去用了。嗯,这也就是所谓的提升代码复用性?
- 泛型类型的新建也是要像List,Dictionary那样 Point然后<>再然后才是(),不要直接把类型放进括号里面了,话说放进去是为啥……