14.Lua调用C#的拓展方法

14.Lua调用CSharp-拓展方法


14.1 知识点

准备工作

LuaManager.Instance.Init();
LuaManager.Instance.Require("Lesson14_Lua调用CSharp_拓展方法");

拓展方法

在C#中定义测试类和工具类

public class Lesson14_TestClass
{
    public string name = "Lesson14_Lua调用CSharp_拓展方法测试类";

    public void Speak(string str)
    {
        Debug.Log(name + "说话:" + str);
    }

    public static void Eat()
    {
        Debug.Log("Lesson14_TestClass吃东西");
    }
}

public static class Lesson14_Tools
{
    //Lesson14_TestClass的拓展方法
    public static void Move(this Lesson14_TestClass testClass)
    {
        Debug.Log(testClass.name + "开始移动");
    }
}

在Lua脚本中调用静态方法、成员方法、拓展方法并做对比

--得到类 需要在CustomSettings中添加类 重新生成
Lesson14_TestClass = Lesson14_TestClass

--实例化类对象
local Lesson14_testClass = Lesson14_TestClass()

--调用静态方法 类名.静态方法()
Lesson14_TestClass.Eat()--Lesson14_TestClass吃东西

--调用成员方法 类实例:成员方法()
Lesson14_testClass:Speak("哈哈哈哈")--Lesson14_Lua调用CSharp_拓展方法测试类说话:哈哈哈哈

--调用拓展方法 类实例:拓展方法方法()
--拓展方法非常特别 需要在CustomSettings中 为Lesson14_testClass添加延伸类型固定写法 
--_GT(typeof(Lesson14_TestClass)).AddExtendType(typeof(Lesson14_Tools)),
Lesson14_testClass:Move()--Lesson14_Lua调用CSharp_拓展方法测试类开始移动

14.2 知识点代码

Lesson14_Lua调用CSharp_拓展方法.lua

print('我是Lua脚本 Lesson14_Lua调用CSharp_拓展方法')

print("**********知识点一 拓展方法************")

--得到类 需要在CustomSettings中添加类 重新生成
Lesson14_TestClass = Lesson14_TestClass

--实例化类对象
local Lesson14_testClass = Lesson14_TestClass()

--调用静态方法 类名.静态方法()
Lesson14_TestClass.Eat()--Lesson14_TestClass吃东西

--调用成员方法 类实例:成员方法()
Lesson14_testClass:Speak("哈哈哈哈")--Lesson14_Lua调用CSharp_拓展方法测试类说话:哈哈哈哈

--调用拓展方法 类实例:拓展方法方法()
--拓展方法非常特别 需要在CustomSettings中 为Lesson14_testClass添加延伸类型固定写法 
--_GT(typeof(Lesson14_TestClass)).AddExtendType(typeof(Lesson14_Tools)),
Lesson14_testClass:Move()--Lesson14_Lua调用CSharp_拓展方法测试类开始移动

Lesson14_Lua调用CSharp_拓展方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson14_Lua调用CSharp_拓展方法 : MonoBehaviour
{
    void Start()
    {
        LuaManager.Instance.Init();
        LuaManager.Instance.Require("Lesson14_Lua调用CSharp_拓展方法");
    }
}

public class Lesson14_TestClass
{
    public string name = "Lesson14_Lua调用CSharp_拓展方法测试类";

    public void Speak(string str)
    {
        Debug.Log(name + "说话:" + str);
    }

    public static void Eat()
    {
        Debug.Log("Lesson14_TestClass吃东西");
    }
}


public static class Lesson14_Tools
{
    //Lesson14_TestClass的拓展方法
    public static void Move(this Lesson14_TestClass testClass)
    {
        Debug.Log(testClass.name + "开始移动");
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏