初学者容易混淆和不理解的一些C#关键字

我就是个初学者,哈哈!我把我栽跟斗的地方记录下来,大家觉得有用就看看吧。

1.yield:
yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中
yield return语句返回集合的一个元素,并移动到下一个元素上。yield break可停止迭代。
包含yield语句的方法或属性也称为迭代块。迭代块必须声明为返回IEnumerator或IEnumerable接口。
这个块可以包含多个yield return语句或     
yield break语句,但不能包含return语句。
用于迭代器的
2.foreach:
IEnumerable 用于foreach
  IEnumerator  用于while(xxx.MoveNext())
并不是非要和yield一起用!!和for差不多只是更方便而已!它是for的子集。
foreach语句默认使用GetEnumerator()方法迭代,也可以自行制定迭代方法。
foreach  语句对实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable<T> 接口的数组或对象集
    合中的每个元素重复一组嵌入式语句。  foreach  语句用于循环访问集合,以获取您需要的信息,但不能用于在源集合中添加或移除项,
    否则可能产生不可预知的副作用。 如果需要在源集合中添加或移除项,请使用 for 循环。 
嵌入语句为数组或集合中的每个元素继续执行。  当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句。 
可以在 foreach 块的任何点使用 break 关键字跳出循环,或使用 continue 关键字进入循环的下一轮迭代。  
foreach  循环还可以通过 goto、return 或 throw 语句退出。 




3.IEnumerable和IEnumerator两个接口:见上面。
 

4.泛型:就是定义一个通用的模板。一般类型参数:T
      如:   Push(T item)  //传入值为任意类型
   T Pop()       //返回值为任意类型
      这样的话,通过泛型可以定义泛型安全类,不会损坏类型安全、性能和
   工作效率。
      比如堆栈类,用Push(int item)太局限,只能处理int型,用Push(Object 
   item)似乎已经很好了,任何类型都可以,但是仍有缺陷:当处理值类型时,会出现
   装箱、拆箱操作,这将在托管堆上分配和回收大量的变量,若数据量大,则性能损失
   非常严重。当处理引用类型时,虽然没有装箱拆箱操作,但将用到数据类型的强制转
   换,增加处理器的负担。
引入泛型可以优雅的解决这些问题。
如重新定义Stack类:
public class Stack<T>
{
 private T[] item;
 public T Pop();
 public void Push(T items);
 ...
}
调用时:
Stack<int> a = new Stack<int>(100);<x>,x为指明的类型就OK。
泛型类:
1.类型是安全的。
2.无需装箱拆箱。因为按照传入的类型生成本地代码。
3.无需类型转换。
如若要限制某种类型的“种族”不允许被这样操作,那么就要使用“泛型约束”
public class Node<T,V>where T:Stack,Comparable
where V:Stack
{
         ....
}
        含义:T必须是从Stack和Comparable继承,V必须是Stack或从Stack继承,否则
将无法通过编译。


装箱:将值类型转换成引用类型




拆箱:反之。 如: int i = 5;
    Object o = i;(装箱)
    int j = (int)o;(拆箱)


5.readonly与const区别:
const int a = b + 1;//不能用一个变量来初始化一个常量。
常数表达式是在编译时执行的。
而readonly允许把一个字段设置成变量,但可以执行一些运算。
readonly是在计算时执行的。readonly是实例成员,所以不同的实例可以有
不同的常量值,这使readonly更加灵活。


        1. const 字段只能在该字段的声明中初始化。
      readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,
  readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。
      readonly可以是任何类型


总结
const只能在初期就使用常量初始化好。对于每一次编译后的结果,
const的值是固定的,而readonly的值是可以在运行的时候才确定值的~~


6.var:不确定值的类型时用var。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值