C# 学习笔记1

初学编程,在这里记录一下吧

一、C#实例之占位符 

看书的时候对输出语句" Console.WriteLine(" ...{0},{1}",x0,x1); " 不太理解,自己揣摩了下,大概{0} {1}分别代表第一个变量和第二个变量吧。在晚上查了下资料,才明白这是占位符,{0}{1}分别代表第一个参数和第二个参数,同理,有{2}的话,就代表是第三个参数。

 

 Console.WriteLine("please input your website name");
            string webname = Console.ReadLine();
            Console.WriteLine("please input your url");
            string url = Console.ReadLine();
            Console.WriteLine("your website is {0},your url is {1}",webname,url);
            Console.ReadKey();


二、C#特殊引用类型

C#有string关键字,在翻译成.NET类时,它就是System.String.有了它,像字符串连接和字符串复制这样的操作就简单了.

1.  string 是引用类型还是值类型

引用类型操作

当使用重载操作符”=”给string对象赋值时,string的对象是引用类型,它保留在堆上,而不是堆栈上.因此,当把一个字符串赋给另一个字符串时,会得到对内存中同一个字符串的两个引用.例如,修改其中一个字符串,就会创建一个全新的string对象(注意,这个过程发生在”=”中),而另一个字符串没有改变.考虑下面的代码:

public class MyClass

{

      public static void Main()

      {

        string str1 = "I am a number";

        string str2 = str1;

        Console.WriteLine("str1 = "+str1);

        Console.WriteLine("str2 = "+str2);

       

        str1 = "I am another number"; 

        Console.WriteLine("after str1 changed... str1 = "+str1);

        Console.WriteLine("after str1 changed... str2 = "+str2);

           Console.ReadLine();

      }   

}

 

Output :

str1 = I am a number

str2 = I am a number

after str1 changed...str1 = I am another number

after str1 changed...str2 = I am a number

 

具有值类型特征的操作

string有两种情况下的操作是具有值类型特征的:

<!--[if !supportLists]-->1)        <!--[endif]-->在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型;

<!--[if !supportLists]-->2)        <!--[endif]-->str1 == str2 ,仅仅是比较了值,而非地址(是MS重写了==运算符所致).

总结:

string 到底是引用类型还是值类型   答:引用类型 .   只不过它在某此操作上会表现出值类型的特征.

string类型的另外一个特殊性在于它是“不会变”的,每次操作string,都相当于新建了一个string对象.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

更多请参考:http://www.cnblogs.com/tling091223/archive/2009/12/23/1630338.html

 

三、栈vs堆:有什么不同?


由于上述解释中出现了 “ 引用类型操作,当使用重载操作符”=”给string对象赋值时,string的对象是引用类型,它保留在堆上,而不是堆栈上” 所以查了下栈和堆的区别:

栈负责保存我们的代码执行(或调用)路径,而堆则负责保存对象(或者说数据,接下来将谈到很多关于堆的问题)的路径。


更多请参考:http://www.cnblogs.com/c2303191/articles/1065675.html

 

 四、 实例化

posted @ 2012-02-21 23:20  Bobby的数据分析之路  阅读(230)  评论(0)    收藏  举报