从另一个类调用方法

本文关键字:方法 调用 另一个 | 更新日期: 2023-09-27 17:50:49

我想知道如何从另一个类调用方法,而不必为该类创建新实例。我查过这个,我看到的90%的例子都要求我重新复制我引用的类。

类似这样的东西:

Fooclass test = new Fooclass();
test.CallMethod();

但是,我想知道是否有一种方法可以在不生成新类实例的情况下调用该方法。现在,我已经在团结中尝试了以下内容。

public ImageLoader image; 
void Start () 
{
    image = gameObject.GetComponent<ImageLoader>() as ImageLoader;
}
void OnClick()
{
    image.MoveForward();
}

然而,当我运行这个程序时,我会得到以下错误:

NullReferenceException:对象引用未设置为对象的实例

我知道这可以通过为我的图像加载器类创建一个新实例来解决,但我不能这样做,因为它包含了很多数据,我不想多次重复。

从另一个类调用方法

可以。第一种方法是使类成为静态的。

public static class Fooclass
{
    // I don't know the return type of your CallMethod, so I used the void one.
    public static void CallMethod()
    {
    }
}

这样,无论何时对代码,您都可以调用CallMethod(),如下所示:

Fooclass.CallMethod()

另一种方法是在当前类中定义一个静态方法,而不需要类是静态的,如下所示:

public class Fooclass
{
    // I don't know the return type of your CallMethod, so I used the void one.
    public static void CallMethod()
    {
    }
}

现在,由于Fooclass的所有实例都将共享一个名为CallMethod的方法,您可以如下调用它:

Fooclass.CallMethod()

而不需要再次实例化Fooclass类型的对象,尽管现在Fooclass不是静态类!

有关更多文档,请查看链接"静态类"answers"静态成员"。

创建一个静态类/静态方法。如果您不希望您的类是静态的,那么将方法设置为静态就足够了。

class my_Class
{
    public static void Print()
    {
        Console.WriteLine("Hello World");
    }
}
my_Class.Print();

如果其他类的方法没有使用任何实例级变量,则可以将其设置为静态并像一样使用

Fooclass.CallMethod();

标记的答案适合您的问题,但也请注意,您原来的问题似乎有所不同。

我想知道导致NullReferenceException: Object reference not set to an instance of an object错误的最初问题是,名为OnClick()的方法在Start()方法之前被调用,还是调用image = gameObject.GetComponent<ImageLoader>() as ImageLoader;从未返回所需类的有效实例,因此image始终为null。

您需要在静态/非静态class中声明一个static成员。即使没有创建类的实例,static成员也可以在class上调用。

例如:

public class Automobile
{
    public static int NumberOfWheels = 4;
    public static int SizeOfGasTank
    {
        get
        {
            return 15;
        }
    }
    public static void Drive() { }
    public static event EventType RunOutOfGas;
    // Other non-static fields and properties...
}

Static成员在首次访问static成员之前以及在调用static构造函数(如果有(之前进行初始化。要访问静态类成员,请使用类的名称而不是变量名来指定成员的位置,如以下示例所示:

Automobile.Drive();
int i = Automobile.NumberOfWheels;

static成员总是由class名称访问,而不是由实例名称访问。无论创建了多少个类实例,static成员都只存在一个副本。Static方法和属性不能访问其包含类型中的非静态字段和事件,并且它们不能访问任何对象的实例变量,除非它在方法参数中显式传递。

来源:http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

希望这对你有帮助。

Shishir