You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何调用其他函数内创建的类实例(Godot引擎开发场景)

C# 跨函数访问类实例的实现方法

你遇到的核心问题是:main函数中创建的ExampleClass实例属于函数局部变量,默认作用域仅局限在main函数内部,其他函数无法直接访问,可通过以下几种常用方案实现需求:

  • 补充注意:C#是大小写敏感的语言,你定义的方法名为SetData,调用时要和定义的大小写保持一致,否则会抛出找不到方法的异常。
  • 方案1:将实例作为参数传入目标函数(首选方案)
    这是耦合度最低、最符合封装规范的实现方式,调用目标函数时直接把创建好的实例作为参数传递即可,同时需要给ExampleClass新增读取私有字段data的公开方法:
public class ExampleClass
{
    private float data;            
   
    public void SetData(float setData)
    { 
        data = setData;
    }

    // 新增公开Get方法,供外部读取data的值
    public float GetData()
    {
        return data;
    }
} 

public void main (){
  float dataStorage;
  // 注意变量名不要用关键字Class,避免命名冲突
  ExampleClass myClass = new ExampleClass ();
  myClass.SetData(1.0f);
  // 把实例作为参数传入returnData
  dataStorage = returnData(myClass); 
}

// 给returnData新增ExampleClass类型的参数
public float returnData (ExampleClass targetClass){
  float getData = targetClass.GetData();
  return getData; 
}
  • 方案2:将实例定义为所属类的成员字段
    如果main和returnData属于同一个自定义类,你可以把ExampleClass实例提升为所属类的成员字段,类内部的所有函数都可以直接访问该实例,适合实例生命周期和所属类一致的场景:
// 假设两个方法都归属在Game类下
public class Game
{
    // 类成员字段,整个类内部可访问
    private ExampleClass _myClass;

    public void main (){
      float dataStorage;
      _myClass = new ExampleClass (); 
      _myClass.SetData(1.0f);
      dataStorage = returnData(); 
    }

    public float returnData (){
      float getData = _myClass.GetData();
      return getData; 
    } 
}

Godot开发中,很多当前脚本全局常用的实例都会用这种方式存储。

  • 方案3:使用静态变量存储实例(谨慎使用)
    如果需要跨不同类全局访问这个实例,可以用静态变量存储,仅适合全局单例场景使用:
public class ExampleClass
{
    // 静态实例,全局可直接访问
    public static ExampleClass Instance;
    private float data;            
   
    public ExampleClass()
    {
        // 构造函数中给静态实例赋值
        Instance = this;
    }

    public void SetData(float setData)
    { 
        data = setData;
    }

    public float GetData()
    {
        return data;
    }
} 

调用时直接访问静态实例即可:

public float returnData (){
  float getData = ExampleClass.Instance.GetData();
  return getData; 
}

注意:静态变量会常驻内存,如果你会创建多个ExampleClass实例,该方案会覆盖之前的实例,仅保留最后创建的实例,非单例场景不推荐使用。

如果你是在Godot引擎中开发,还可以通过Godot内置的节点查找方法获取挂载在其他节点上的脚本实例,比如GetNode<ExampleClass>("对应节点路径"),可以直接拿到目标节点上的ExampleClass脚本对象,无需手动传递参数。

内容的提问来源于stack exchange,提问作者Nilhope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:02