2014-02-14 128 views
-3

嘿計算器用戶,訪問的對象在另一個類的屬性功能

得到一個快速

我試圖訪問另一個類的功能的對象的屬性,不是我似乎能讓它工作。

class Program 
{ 
    static void Main(string[] args) 
    { 
     User PIE = new User(); 
     Userchanger changer = new Userchanger(); 
     changer.ChangeToFailedUser(PIE); //this won't work - The best overloaded method match for 'ConsoleApplication1.Userchanger.ChangeToFailedUser(ref object)' has some invalid arguments 

    } 
} 

public class User 
{ 
    public string Username = "Firstname.Lastname"; 
} 

public class Userchanger 
{ 
    public void ChangeToFailedUser (ref object PIE) 
    { 
     object PIEThingy = PIE; 
     PIEThingy.Username = "AnotherFN.AnotherLN"; //So how do I actually access the object User's Username string variable? It's more important that I can GET the variable rather than edit it. 
    } 
} 

回答

3

您應該添加,當你傳遞一個參數作爲裁判參數ref關鍵字

changer.ChangeToFailedUser(ref PIE); 

documentation

要使用裁判參數,無論是方法定義和調用方法必須exp合法使用ref關鍵字,如以下示例所示。

而且object類不包含Username property.To訪問你的財產,你應該使用cast,或使用as操作,以避免InvalidCastException

User PIEThingy = PIE as User; 

if(PIEThingy != null) PIEThingy.Username = "AnotherFN.AnotherLN"; 
1

您不必使用ref更新一個類實例。它通過引用傳遞,默認情況下。

只需更改方法上的簽名即可接受User而不是ref object

public class Userchanger 
{ 
    public void ChangeToFailedUser (User PIE) 
    { 
     PIE.Username = "AnotherFN.AnotherLN"; 
    } 
} 

另一方面,諸如int之類的基本類型按值傳遞。您可以使用ref關鍵字來指定您對傳入參數所做的任何更改也針對調用方法中的變量。

1

您已在User類中創建了房產,爲什麼您在object的例子中期待它。同樣類的實例默認通過引用傳遞,所以不需要ref

相關問題