unity开发 --------- c# 基本语法 002

来源:互联网 发布:软件bs架构 编辑:程序博客网 时间:2024/06/10 11:25

关联内容:

c#基本语法   http://blog.csdn.net/u012085988/article/details/19981161



1、class与struct

在c#中结构与类的区别在于他们在内存上的存储方式,访问方式(class是存储在堆上的引用类型,struct是存储在栈上的值类型)和他们的的一些特性(如struct不支持继承)。对于较小的数据类型使用struct能提高性能。在语法上,struct与class非常相似。他们都是用new来声明实例!


2、传参 : 直接传参,ref传参,out传参

同c++一样,c#默认的传参方式是传值(注意,对于引用类型,实际传递的是引用的一个拷贝,而并非是引用所指对象的拷贝);若想像c++中的“&”一样传递参数,就要用到关键字ref, ref表示的意义与引用符号“&”一样,但语法上有所不同:“&”只需在定义函数时显示地标注,而ref不仅在定义时要显示滴给出,在调用时也要显示滴标注。如:

public void test(ref int i){    // ...}public void func(){    int i = 8;   test(ref i);}
前面说过,c#中变量未初始化,就会被视为只声明,没有实际定义的变量!这时,如果将该变量当做右值使用,编译器就会报错!而关键字out打破了这一规则!它可以使用没有初始化过的变量!!!代码如下:
public void test(out int i){   i = 111;}public void func(){    int a;    test(out a);}
如果不用关键字out,这段代码是无法通过编译的。


3、缺省参数。与c++一致


4、命名参数。使用命名参数,可以不按参数定义的顺利来带入参数。

public void test(string first, string second){    // .....}// 调用函数test(second:"haha", first: "hehe");

5、属性

c++中并没有这个概念,实际上他就是一个字段,然后用get、set来设定访问权限。

private int age;public int Age{    get    {        return age;    }    private set    {        age = value;    }}

需要注意的是,get和set必须有一个是public的,否则,就会产生一个编译错误。

若我们像下面这样写,则系统会自动为我们实现属性。

private int Age{get; private set}

6、inline

c#中并没有inline这个关键字,言外之意就是我们在C#中不能显示滴控制某个函数是否是inline的。相反,编译器会自动为我们完成inline优化!像属性这种简单的操作,编译器就会自动帮我们优化为inline。


7、静态构造函数

静态构造函数没有权限修饰符(public、private。。。)。如:

static Name(){}
它最大的特点就是只调用一次!但何时调就不知道了。


8、构造函数初始化器

构造函数初始化器就是从构造函数中调用其他构造函数

class Car{    public Car(string arg1, uint arg2)    {         //....    }    public Car(string arg) : this(arg, 4)    {    }}
当然,还能调用基类中的构造函数,调用基类构造函数,只需将this改为base

这点与c++11中的代理构造函数相似。

9、只读字段 readonly

readonly为不变量,即一旦初始化后就不会被修改的量,所以c#称之为只读变量。它的使用与其他字段相同,但只能在构造函数中赋值!


10、匿名类型

var test1 = new { FirstName = "fn", LastName = "ln"}var test2 = new { FirstName = "ffn", LastName = "lln"}

则test1和test2的类型相同,可以使用test1 = test2进行赋值。

若某个类有FirstName和LastName这两个字段,还可以向下面这样定义

var test  new{obj.FirstName, obj.LastName};
这样就会自动将obj中的FirstName和LastName两个字段映射到匿名类中。


11、struct

使用struct要注意一下内容

①不支持继承

②编译器总是会提供一个默认构造函数。它是不允许替代的。

③可以指定字段在内存中的布局

struct对象调用new时,并不是在堆上分配内存,而是调用相应的构造函数。对于struct,不调用new也是可行的。如:

struct Test {};Test t = new Test();// 或者直接Test t;    t.x = ...  // 这里编译器并不会把他当成未初始化的变量,对于struct,这种语法是合法的,但对于class,就会报错

12、 partial 部分类

c#允许使用partial将class,struct和接口分开写到不同的文件


13、静态类


14、扩展方法

有许多扩展类的方法。如果有源码,可以用继承。但如果没有源码怎么办?c#提供了一种方法,叫扩展方法。

扩展方法是静态的,它的关键部分就是在定义方法时,第一个参数要是如下格式

this className name;
如:

public static class Test{    public static void add001(this Money money, decimal amount)    {        money.Amount += amount;    }}

方法add001就是类Money的拓展方法!此后就可以像其他成员函数一样,调用add001函数了。

0 0
原创粉丝点击