注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

C#几个问题的解答  

2011-11-04 10:31:37|  分类: DotNet |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.      Switch语句

C#中的switch语句可以使用整型(int)、字符(char)、枚举(Enum)或字符串(String)

C#不允许从一个case标签贯穿到另一个case标签。如果一定需要这样,可以使用goto casegoto default实现。

 

int i = 1;

String a = “abc”;

 switch(a)

 {

  case “abc”:  //case不含任何语句,可以进入下个case的执行

 

  case “def”:

      i++;

      break;  //没有break会编译错误,但可使用:goto case “ghi”; 跳转到case “ghi”

  case “ghi”:

      i--;

      break;

  default:

      break;

 }

 

 

2.      Out 参数修饰符

out修饰符指定所给的参数是一个输出参数。使用out修饰符当方法返回前需显式给参数赋值。

public static void showDouble (int a, out int b)
    {
        int b = 0;   //
此处有误,应将这一句去掉
        b = a * 2;
    }

 

 

3.      堆和栈

 

public struct Vector                     public class CVector
{                                    {
    public float direction;                    public float direction;
    public int magnitude;                    public int magnitude;
}                                    }

Vector vector = new Vector();
Vector[] vectors = new Vector[1000];      CVector[] cvectors = new CVector[1000];

 

vector的值分配在栈上,而vectors属于引用类型,它的值是分配在堆上的。

对于struct Vector而言,执行了Vector[] vectors = new Vector[1000]; 之后在内存中的分配情况如下图:

C几个问题的解答 - 乂乂 - 一个人,一支烟  ·~~ 

而对于class CVector,如果只执行了CVector[] cvectors = new CVector[1000];在内存中分配情况如下图:

C几个问题的解答 - 乂乂 - 一个人,一支烟  ·~~ 

还需要使用for循环语句对每个Cvector进行实例化。

for(int i = 0; i < 1000; i++)

{

    cvectors[i] = new CVector();

}

执行了这段代码之后,在内存分配情况如下:

C几个问题的解答 - 乂乂 - 一个人,一支烟  ·~~ 

所以,把1000Vector分配在一块空间上,这比我们将Vector声明为类并使用for循环去实例化1000个独立的Vector更有效率。

注:栈的默认大小是1M,但是可以修改。

 

4.      Setget

 

public int Size

{
    get {return size;}
    set {size = value;}

}

可以只写get或者set。如果一个属性仅有 get 访问器,则它为只读属性。如果它仅有 set 访问器,则为只写属性。如果它同时具有这两种访问器,则为读写属性。

 

 

5.      委托

 

using System;

 namespace Sample

{

     public delegate int EventHandler(int a,int b);

     class Class1

     {

     public static event EventHandler MyEvent;

         protected override void OnLaunched(LaunchActivatedEventArgs args)

         {

             MyEvent += new EventHandler(Add);

int result = MyEvent(1, 2);

         }

 

         private int Add(int num1, int num2)

         {

             return(num1+num2);

         }

     }

}

 

使用委托添加多个方法的执行顺序,按添加的先后调用。

如果添加的多个方法都有返回值,结果为最后添加的方法的返回值。

 

 

6.      Using语句

 

void ShowUriContent( string uri)

{

    using (WebClient client = new WebClient())

    {  

        string text = client.DownloadString(uri);

        Display(text);

    }

}

 

using 块中,对象是只读的并且无法进行修改或重新分配。如果尝试在 using 块外部使用该对象,则可能导致引发异常。 由于这个原因,通常最好是在 using 语句中实例化该对象并将其范围限制在 using 块中。

using语句详解

 

作者:Mars Li <Mars_Li@asus.com>, Smilefish_Shi <Smilefish_Shi@asus.com>

  评论这张
 
阅读(870)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017