引用其他函数 C# 创建的实例的函数

Function referring to an instance created by other function C#

我有一个可能很愚蠢的问题,但我是 C# 的新手,所以请原谅我的无礼。我想知道一个函数是否可以引用一个由另一个函数创建的实例。

我包含了一个示例代码来说明我的意思:

class Program
{
    static void Main(string[] args)
    {
        Instantiator.Instantiate();
        Referent.Refer(instance);
        Console.ReadLine();
    }
}

public class Instance
{
    public void OnInstantiated()
    {
        Console.WriteLine("I have been instantiated.");
    }
    public void OnReferred()
    {
        Console.WriteLine("I have been referred to.");
    }
}

public class Instantiator
{
    public static void Instantiate()
    {
        Instance instance = new Instance();
        instance.OnInstantiated();
    }
}

public class Referent
{
    public static void Refer(Instance instance)
    {
        if(instance != null)
        {
            instance.OnReferred();
        }
        else
        {
            Console.WriteLine("No instance to refer to.");
        }
    }
}

我可以使用什么来引用 Referent.Refer 函数中的 "instance" 实例(由 Instantiator.Instantiate 函数创建)?

提前感谢您的中肯意见!

完成后Instantiatorreturnclass

public class Instantiator
{
    public static Instance Instantiate()
    {
        Instance instance = new Instance();
        instance.OnInstantiated();
        return instance;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var instance = Instantiator.Instantiate();
        Referent.Refer(instance);
        Console.ReadLine();
    }
}

Instantiate() 正在执行的模式通常称为“Factory Pattern

您可以使用的另一个选项是 Singleton 模式。如果你还需要你的实例只有一个,你可以将创建一个新实例的责任交给 return 之后 class 本身。

class Program
{
    static void Main(string[] args)
    {
        Instance.Instantiate();
        Referent.Refer(Instance.GetInstance());
        Console.ReadLine();
    }
}

public class Instance
{
    private static Instance myInstance;
    public void OnInstantiated()
    {
        Console.WriteLine("I have been instantiated.");
    }
    public void OnReferred()
    {
        Console.WriteLine("I have been referred to.");
    }
    public static void Instantiate()
    {
        myInstance = new Instance();
        myInstance.OnInstantiated();
    }
    public static Instance GetInstance()
    {
        return myInstance;
    }
}

public class Referent
{
    public static void Refer(Instance instance)
    {
        if (instance != null)
        {
            instance.OnReferred();
        }
        else
        {
            Console.WriteLine("No instance to refer to.");
        }
    }
}