結構和類別 的傳遞

1 篇文章 / 0 new
author
結構和類別 的傳遞
C# 使用 結構,類別傳遞時, 前者是傳值方式, 後者則為傳址方式
class TheClass
{
    public string willIChange;
    public TheClass(string data) {
        willIChange = data;
    }
    public string WillIChange {
        get { return willIChange; }
        set { willIChange = value;}
    }
}
 
struct TheStruct
{
    public string willIChange;
    public TheStruct(string data) {
        willIChange = data;
    }
    public string WillIChange {
        get { return willIChange; }
        set { willIChange = value;}
    }
}
參考一
class TestClassAndStruct
{
    static void ClassTaker(TheClass c)
    {
        c.WillIChange = "Changed";
    }
 
    static void StructTaker(TheStruct s)
    {
        s.WillIChange = "Changed";
    }
 
    static void Main()
    {
        TheClass testClass = new TheClass();
        TheStruct testStruct = new TheStruct();
 
        testClass.WillIChange = "Not Changed";
        testStruct.WillIChange = "Not Changed";
 
        ClassTaker(testClass);
        StructTaker(testStruct);
 
        Console.WriteLine("Class field = {0}", testClass.WillIChange);
        Console.WriteLine("Struct field = {0}", testStruct.WillIChange);
    }
}
/* Output:
    Class field = Changed
    Struct field = Not Changed
*/
參考二
class TestClassAndStruct
{
    static void Main()
    {
        TheClass classA = new TheClass("Not Changed");
        TheClass classB = TheClass classA; //classB 指向 classA 兩者是同一個
        classB.willIChange = "Changed";
 
        TheStruct structA = new TheStruct("Not Changed");
        TheStruct structB = structA; //複製一份 structA到structB, 兩者各自獨立
        structB.willIChange = "Changed";    
 
        Console.WriteLine("Class field = {0}", classA.WillIChange);
        Console.WriteLine("Struct field = {0}", structA.WillIChange);
    }
}
/* Output:
    Class field = Changed
    Struct field = Not Changed
*/
Free Web Hosting