访问另一个类函数中的对象的属性

时间:2014-02-14 02:50:56

标签: c# object

嘿stackoverflow用户,

快点一下

我正在尝试访问另一个类函数中的对象的属性,我似乎无法让它工作。

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 个答案:

答案 0 :(得分:3)

将参数作为参数参数

传递时,应添加ref关键字
changer.ChangeToFailedUser(ref PIE);

请参阅documentation

  

要使用 ref 参数,方法定义和调用方法都必须显式使用ref关键字,如以下示例所示。

并且object类不包含Username属性。要访问您的媒体资源,您应该使用cast,或使用as运算符来避免InvalidCastException

 User PIEThingy = PIE as User;

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

答案 1 :(得分:1)

您不必使用ref来更新类实例。默认情况下,它通过引用传递。

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

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

另一方面,int等基本类型按值传递。您可以使用ref关键字指定您对传入参数所做的任何更改也会在调用方法中对变量进行更改。

答案 2 :(得分:1)

您已在User课程中创建了属性,为什么在object的实例中期望它?此外,类的实例默认通过引用传递,因此不需要ref