Unity C#中如何在另一个脚本中访问重写函数?
在Unity C#中访问另一个脚本的重写函数
好的,咱们来一步步解决这个问题。从你给出的代码片段来看,WebSocketNetwork继承了抽象类WebsocketSession,并且重写了它的GametableHistory抽象方法。要在另一个脚本里访问这个重写后的方法,你可以按照下面的方式操作:
1. 获取WebSocketNetwork的有效实例
首先,你需要在要调用方法的目标脚本中,拿到WebSocketNetwork的实例。常见的获取方式有两种:
- 如果脚本挂载在GameObject上:使用
FindObjectOfType来查找,或者给WebSocketNetwork实现单例模式(就像你代码里的PlayInfo.Instance那样)。示例代码:private WebSocketNetwork _wsNetwork; void Start() { // 查找场景中挂载了WebSocketNetwork的对象 _wsNetwork = FindObjectOfType<WebSocketNetwork>(); // 要是你实现了单例,就这么用:_wsNetwork = WebSocketNetwork.Instance; } - 如果是动态创建的实例:直接保存创建时的引用即可,比如在实例化后把对象赋值给目标脚本的变量。
2. 调用重写后的GametableHistory方法
拿到实例之后,因为GametableHistory是public修饰的,你可以直接调用它,传入所需的参数就行。示例代码:
// 先准备好方法需要的参数(这里替换成你的实际数据) bool operationSuccess = true; int tableNumber = 3; int targetYear = 2024; int targetMonth = 5; int targetDay = 20; int shoeNumber = 15; bc_gametable_history_list historyList = new bc_gametable_history_list(); // 替换为你的实际列表对象 // 调用重写方法,记得先判断实例不为空 if (_wsNetwork != null) { _wsNetwork.GametableHistory(operationSuccess, tableNumber, targetYear, targetMonth, targetDay, shoeNumber, historyList); } else { Debug.LogError("找不到WebSocketNetwork的实例,请检查脚本是否挂载或实例已创建!"); }
3. 利用多态特性调用(可选)
如果你的逻辑中持有WebsocketSession类型的引用,只要这个引用实际指向的是WebSocketNetwork的实例,调用GametableHistory时也会自动触发重写后的方法——这就是C#的多态特性。示例:
WebsocketSession baseSession = _wsNetwork; baseSession.GametableHistory(operationSuccess, tableNumber, targetYear, targetMonth, targetDay, shoeNumber, historyList); // 同样会执行WebSocketNetwork里的重写逻辑
内容的提问来源于stack exchange,提问作者Ginxxx
相关产品推荐
相关产品推荐

