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函数了。
- unity开发 --------- c# 基本语法 002
- unity开发 --------- c# 基本语法
- unity开发 --------- c# 基本语法 001
- unity开发 --------- c# 基本语法 003
- unity开发 --------- c# 基本语法 004
- unity开发 --------- c# 基本语法 005
- unity开发 --------- c# 基本语法 006
- unity开发 --------- c# 基本语法 007
- unity开发 --------- c# 基本语法 008
- C#基本语法之C#开发环境
- Unity基本语法
- C#基本语法
- c#基本语法
- C# 基本语法
- C#的基本语法
- C#基本语法
- c#基本语法
- c#的基本语法
- 用基于WebGL的BabylonJS来共享你的3D扫描模型
- MetaQ集群安装测试
- [LeetCode] Convert Sorted Array to Binary Search Tree
- Hibernate 数据库到实体类
- DataGridView单击选中一整行,只能单选,不能选择多行,只能选择一行
- unity开发 --------- c# 基本语法 002
- 用友NC6该产品的用户数已达到产品授权数!
- Word Break II
- Python序列化的使用(有少量修改)
- 谷歌在招什么样的人?
- 线性表之顺序存储结构删除操作
- form外观控制
- SQL Server 2012 安装图解教程
- ip转换为基本类型的简单封装