C# 如何从另一个类访问一个类的实例?

C# 如何从另一个类访问一个类的实例?,c#,C#,我有以下代码: public class UnitManager { public string Name { get; set; } public string Firstname { get; set; } public UnitManager(string name, string firstname) { this.Name = name; this.Firstname = firstname; } } clas

我有以下代码:

public class UnitManager
{
    public string Name { get; set; }
    public string Firstname { get; set; }

    public UnitManager(string name, string firstname)
    {
        this.Name = name;
        this.Firstname = firstname;
    }
}

class Other
{
}

class Program
{
    static void Main(string[] args)
    {
        var player1 = new UnitManager("p1Name", "p1FirstName");

        var player2 = new UnitManager("p2Name", "p2FirstName");
    }
}
因此,我在
Program
类中创建了2个对象。 我想做的是从
Other
类中访问这些实例,以便//执行一些操作

例如,访问玩家姓名,在其姓名中输入一个标题,然后评估玩家2并输入另一个标题


请记住,这只是一个示例,我并不是真的打算使用它,我只是想理解这个概念。

我想你可以在
Other
类中编写
UnitManager
属性,设置
UnitManager

public class Other
{
    public UnitManager manager1{ get; set; }
}
或者编写一个方法,将pass
UnitManager
实例作为参数

public class Other
{
    public void SetTitle(UnitManager m1) {
        // do your logic
    }
}

我想你可能想要这样的东西:

public class UnitManager
{
public string Name { get; set; }
public string Firstname { get; set; }

public UnitManager(string name, string firstname)
{
    this.Name = name;
    this.Firstname = firstname;
}

}


public class Other
{
     public void doSomething(UnitManager myUnit) {
             //do something with each unit manager
     }
}

public class Program
{
    static void Main(string[] args)
{
    //create an object of type UnitManager and place it into variable player1
    var player1 = new UnitManager("p1Name", "p1FirstName");
    //create an object of type UnitManager and place it into variable player2
    var player2 = new UnitManager("p2Name", "p2FirstName");

    //create an instance of the class Other
    Other ot = new Other();

    //call the method within the instantiated class ot (of type Other) and
    //pass it the instance of the object UnitManager with a name
    //of player1
    result1 = ot.doSomething(player1);
    result2 = ot.doSomething(player2);
}
}

谢谢大家,我终于明白了:)

下面是我如何在你的帮助下工作的:

public class UnitManager
{
    public string Name { get; set; }
    public string Firstname { get; set; }

    public UnitManager(string name, string firstname)
    {
        this.Name = name;
        this.Firstname = firstname;
    }
}

class Other
{
    public static void AddTitle(UnitManager myUnit)
    {
        var titlePlusFullName = ("The Legendary" + " " + myUnit.Name + " " + myUnit.Firstname);
        myUnit.Name = titlePlusFullName;
    }
}

class Program
{
    static void Main(string[] args)
    {

        var player1 = new UnitManager("john", "smith");

        var player2 = new UnitManager("jen", "doe");

        Other oT = new Other();

        Other.AddTitle(player1);
        Console.WriteLine("Player 1 name: " + player1.Name);
    }
}
它显示全名+标题。

如果您正好有2个
实例(玩家),为什么不在
UnitManager
中创建它们呢

// sealed: since we have 2 instances only we don't want to
// inherit (and create) derived classes
public sealed class UnitManager
{
    public string Name { get; set; }
    public string Firstname { get; set; }

    // private: since we have 2 intances only we don't want to expose the constructor
    private UnitManager(string name, string firstname)
    {
        this.Name = name;
        this.Firstname = firstname;
    }

    // Think over renaming these fields: say, Player and Computer
    public static readonly UnitManager Player1 = new UnitManager("p1Name", "p1FirstName");
    public static readonly UnitManager Player2 = new UnitManager("p2Name", "p2FirstName");
}
然后将它们命名为
UnitManager.Player1
UnitManager.Player2
)例如

甚至(借助静态导入):


你应该解释你的代码,让你的答案更有价值。好吧,我添加了一些注释,但看起来你得到了下面的答案。请确保给作者的答案打分,这样他们就可以因为试图帮助你而得到分数。实际上,到目前为止我还没有想到,但我喜欢你的方法,它使以这种方式操作数据变得更容易,谢谢!
class Program
{
    static void Main(string[] args)
    {
        UnitManager.Player1.Name = "First Name";
        UnitManager.Player2.Name = "Second Name";

        ...
    }
}
using static MyNamepace.UnitManager;

...

class Other
{
    public void DoSomething() 
    {
        // We don't have now put it as UnitManager.Player1 
        string name1 = Player1.Name;
        ...  
    }
}