1.使用ref 和out ---修改原来的值和C++的指针和引用有点相似
ref和out 都是按地址传递的,使用后都将改变原来的数值, ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
区别就是ref需要先初始化值,而out不需要,总结起来就是ref 有进有出,out只出不进
还有就是我们经常使用的函数都是返回一个值的【返回数组,list,等除外】,那么我们如果想在一个函数中返回多个值呢?那么out就起作用了,我们可以使用out返回多个值
拓展:学习这个知识的时候,学到了params (params是为动态数组而准备的,我们直接输入数组的元素就行了)
例如下方代码,如果没有这个params 关键字 ,我们需要 这样调用:Getdd(new []{1,2,3});
public void Getdd(params int[] pp) { foreach (var p in pp) { print(p); } } void Start() { Getdd(1,2,3); }
2. Linq:C#语言特性(Language Integrated Query)即语言集成查询
LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。
LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。
LINQ主要包含以下三部分:
1、LINQ to Objects 主要负责对象的查询。
2、LINQ to XML 主要负责XML的查询。
3、LINQ to ADO.NET 主要负责数据库的查询。
LINQ to SQL 这个查询方式可能有些慢
LINQ to DataSet [可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。]
LINQ to Entities 实体
3.UnityEvent和UnityAction TODO:两者区别
1.UnityAction本质上是delegate,且有数个泛型版本(参数最多是4个),一个UnityAction可以添加多个函数(多播委托)
委托:定义一个事件容器,用户可以不断向这个容器绑定事件,用户不关心什么时候触发,只关注自己要实现的内容,而这 个容器就监听这事件什么时候被触发,就通知这些用户执行这些方法,只是充当一个通知者
2.UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有Invoke()方法能够一次性调用所有注册了的UnityAction。UnityEvent也有数个泛型版本(参数最多也是4个),但要注意的一点是,UnityAction的所有带参数的泛型版本都是抽象类(abstract),所以如果要使用的话,需要自己声明一个类继承之,然后再实例化该类才可以使用。那我们能不能这么理解:将UnityEvent看作是unity所有的一个大容器,然后将不同委托分类添加进去,然后使用Invoke(),一次将所有注册了委托下面绑定的方法调用起来
4.System.Serializable
5:网络方面:
Q5.1你在字符串截取的时候,如果直接使用str.Length 无法正确区分中文和英文的长度,
A1:int length =System.Text.UnicodeEncoding.Default.GetByteCount(str);
A2:int length = Encoding.GetEncoding("GB2312").GetBytes(tstr.ToCharArray()).Length;