2014-02-14 90 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

相关问题