【Note】C#基础知识(2)
- Public - 公开的都可访问。
- Internal - 程序集内可访问。
- Protected - 子类可以访问父类,其他类不可访问。
- Private - 私有的,仅当前类可访问。
- Protectef Internal - 在当前程序集内可访问,在其他程序集内需通过派生类类型的变量进行访问。
用VS新建的类在不添加修饰符字段的情况下默认是Internal,字段默认的是Private,接口默认的是Public。
- 通过值传递传递参数的话,形参接收到的参数是实参的副本,所以在对形参进行更改的时候,对实参本身没有任何影响。
- 通过引用传递传递参数的话,形参接收到的参数就是实参的本身的地址了,形参和实参指向了同一个存储单元,所以在对形参进行更改的时候,对实参本身也进行了更改。
这里顺道解释一下什么是实参什么是形参,比如下面的例子。1
2
3
4
5
6
7
8
9public void Function1()
{
int x = 0;
Function2(x);// x - 实参
}
public void Function2(int y) // 形参
{
}
相同点:ref和out都通过引用传递的方式传递参数。
不同点:
- ref将参数值传入方法,out无法将参数值传入方法。
- ref传入参数前必须先初始化,out不必在传入参数前初始化,但在方法中需初始化。
网上的一句总结:ref有进有出,out无进有出。
使用:
- 当一个值类型很大时,而这个方法经常被调用的时候,为了避免大量浪费栈空间,可以使用ref参数。
- 当需要返回不同类型的值的时候,就可以用out参数。当然out参数也可返回单个值。
- const属于编译时赋值。在编译的时候就编译好了,所以主要用于一些常量,不会变的数值。
- readonly属于运行时赋值。简单的说则是除了静态方法以外,每次初始化实例的时候,才会给相应的数据赋值,以及可以在构造函数进行赋值操作。适用于初始化完毕之后就固定下来的内容。
这三种接口的区别其实可以在编辑器敲出来然后F12进去看一下。这里还带了一个知识点,就是接口是可以多继承的。
IEnumerable接口只提供了一个获取迭代器的方法,这就是foreach能遍历实现了IEnumerable接口集合的原因。
1 | public interface IEnumerable |
ICollection继承了IEnumerable的方法,然后额外提供了添加、删除、更新等操作。
1 | public interface ICollection<T> : IEnumerable<T>, IEnumerable |
IList同时实继承了ICollection、IEnumerable,在这两个接口的基础上提供了另外的添加、移除功能,还提供了查询item对应的索引值的方法。
1 | public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable |
从上述基本上可以得知,在性能上IEnumerable > ICollection > IList。
在只遍历的情况下,使用IEnumerable;
对集合进行操作,用ICollection;
需要用到集合的索引的时候,用IList;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CHUNGLAM!