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

C# 在另一个类函数中访问对象的属性,c#,object,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

嘿,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.
    }
}

当您将参数作为ref参数传递时,应该添加一个
ref
关键字

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

并且
对象
类不包含
用户名
属性。要访问您的属性,您应该使用
强制转换
,或者使用
as
操作符以避免
无效强制转换

 User PIEThingy = PIE as User;

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

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

只需将方法上的签名更改为接受
用户
,而不是
ref对象

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

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

您已经在
User
类中创建了属性,为什么希望在
对象的实例中使用该属性。另外,默认情况下,类的实例是通过引用传递的,因此不需要
ref

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