yongshi123

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、当向方法中传递参数时,如果参数是值类型,那么在方法中该参数所有变化将不会保留下来,一旦方法结束,参数结果也会销毁。而如果参数是应用类型的时候,方法中参数的改变将会保留下来。例如参数是数组、类等,但是这里要注意的是string却不会保留变化。
可以使用out和ref关键字将值类型参数强制保持方法中对参数的改变。方法的调用依然得加上两个关键字。但是两者应用的过程当中,存在某些区别,使用ref,在方法调用的时候必须对其进行初始化,而使用out关键字则只需要在使用参数之前对参数声明,而不必要初始化。例如:
    class Program
    {
        public static  void change (out int i)
        {
            i = 100;
        }
        static void Main(string[] args)
        {
            int i;
            change(out i);
            Console.WriteLine(i);
        }
    }
以上能正常编译,但是当把out换成ref就会出错了。

二、readonly关键字比常量变量使用起来更具有有灵活性,同样用它来声明的变量不能改变,它的初始化在构造函数中进行。

三、关于继承的构造函数,当初始化继承类的时候,将同时初始化基类没有带参数的构造函数(谨记),先调用基类构造函数在调用继承类的。当继承类中有带参数的构造函数时,基类必需显式定义声明不带参数的构造函数,否则会报错。而当使用base关键字重载基类的构造函数时,一下两个好例子很好帮助了解:
//Demo1:
class Nevermore60Customer : GenericCustomer
{
   public Nevermore60Customer(string name, string referrerName) //重载了基类中只含有name参数的构造函数
      : base(name)
   {
      this.referrerName = referrerName;
   }
     
   private string referrerName;
   private uint highCostMinutesUsed;

//Demo2:
public Nevermore60Customer(string name)
   : this(name, “ < None > ”)                //这个表示当没有第二个参数的时候就是用默认的值
{


四、array类的几个用法:
            //Array arr = Array.CreateInstance(typeof(int), 5);      //创建一个整型的大小为数组,因为所有的数组都是继承自array类的,而array类是抽象类,但有一个CreateInstance来创建一个数组。
            //for (int i = 0; i < 5; i++)
            //{
            //    arr.SetValue(i, i);                               //给数组赋值,第一参数是赋予的值,第二个是数组中的位置
            //}
            //Console.WriteLine("the array :");
            //for (int i = 0; i < 5;i++ )
            //{
            //    Console.WriteLine(arr.GetValue(i));               //获取数组的值
            //}
            int[] arr=new int[]{5,7,9,2,1,8};
            for (int i = 0; i < 6;i++ )
            {
                Console.WriteLine(arr[i]);
            }
            Array.Sort(arr);                                       //c# .Net Framework中Array的Sort方法其实是一个冒泡排序的方法
            for (int i = 0; i < 6; i++)
            {
                Console.WriteLine(arr[i]);
            }
            Console.ReadLine();
Array类是实现了IEnumerable,ICollection和IList接口以访问和遍历数组中的元素。

五、yield return  returns one element of a collection and moves the position to the next element, and   yield
break  stops the iteration.

IEnumerable使用的好例子:
 public class MusicTitles
 {
     string[] names = {
           “Tubular Bells”, “Hergest Ridge”,
           “Ommadawn”, “Platinum” };
        
     public IEnumerator GetEnumerator()          //直接通过类的迭代来返回这里面yield return的内容
    {
        for (int i = 0; i  <   4; i++)
        {
            yield return names[i];
        }
    }
         
    public IEnumerable Reverse()               //遍历语句块里面yield return的所有内容
    {
        for (int i = 3; i  >  = 0; i--)
        {
            yield return names[i];
        }
    }
          
    public IEnumerable Subset(int index,int length)    //访问其中的子元素
    {
        for (int i = index; i  <  index + length;
                  i++)
        {
            yield return names[i];
        }
    }
}
public class program
{
   static void main()
     {
          MusicTitles titles = new MusicTitles();
          foreach (string title in titles)
             {
                 Console.WriteLine(title);
             }
          Console.WriteLine();
  
          Console.WriteLine(“reverse”);
          foreach (string title in titles.Reverse())
             {
                Console.WriteLine(title);
             }
          Console.WriteLine();
 
          Console.WriteLine(“subset”);
          foreach (string title in titles.Subset(2, 2))
            {
               Console.WriteLine(title);
            } 
     }
}

posted on 2008-12-30 21:13  yongshi123  阅读(138)  评论(0)    收藏  举报