准备
了解Lua语言
了解table
面向对象
1.类
Lua语言本身是没有“类和对象”的概念的。
table是引用型数据。
使用 Lua 语言本身的 table模拟出类和对象的关系。由于是模拟出来的,所以和在C#中学习过的面向对象还是有很大的不同。
C#语言当中类最基本的组成成员是“字段”和“方法”。下面演示模拟创建一个Person类。
知识点分析:
①类:就是初始化一个 table;
②类中的字段:在 table 的{ }内进行定于,可以指定初始化值;
③类中的方法:就是普通函数的语法格式,方法名的语法格式是“类名:方法名”;
④self 关键字:作用类似于 C#中的 this,指的是当前类(表)。(要注意:函数才有self,.没有)
--初始化一个类
Person = {name,age,gender,address = "China"}
--模拟一个方法
function Person:Show()
print(self.name,self.age,self.gender,self.address)
end
2.类的实例化
C#语言中,我们是通过构造方法进行类的实例化的。在 Lua 语言中,我们也需要模拟一个构造方法,并通过元表的方式,创建类的实例对象。
这里主要用到的就是前面学的的“元表”。
--模拟构造方法
--这样的话声明新的类(表)用的就是新的内存地址
function Person:New()
obj = {} --初始化一个新表
setmetatable(obj,Person) --将当前的类(表)设置为新表的元表
Person.__index = Person --指定元表的__Index索引
return obj
end
我们也可以在构造函数中直接将类初始化。
如果不是全局变量最好加上local关键字。
function Person:New(name,age,gender,address)
local obj = {}
setmetatable(obj,self)
Person.__index = self
self.name = name
self.age = age
self.gender = gender
self.attack = attack
return obj
end
3.对象基本使用
在 C#语言中我们是需要通过类来实例化一个对象的。但是在 Lua 语言中,我们也可以模拟出类似的关系。
知识点分析:
①访问对象中的字段:格式是“对象名.字段名”;
②访问对象中的方法:格式是“对象名:方法名”。
Test1 = Person:New()
Test1.name = "1";
Test1.age = "1";
Test1.gender = "1";
Test1:Show()
Test2 = Person:New()
Test2.name = "2";
Test2.age = "2";
Test2.gender = "2";
Test2:Show()
4.继承
在 C#语言的面向对象中,类与类之间是存在继承关系的。
子类继承父类,在子类中就可以访问到父类中的公开的字段和方法。
下面进行类继承关系的模拟和演示。
--创建一个动物类父类
Animal = {name} --字段.
--构造方法
function Animal:New(name)
local obj = {}
setmetatable(obj, self)
self.__index = self
self.name = name
return obj
end
--普通方法.
function Animal:ToString()
print(self.name .. "Animal类中的方法")
end
--子类继承父类.
Cat = Animal:New(nil)
--子类的构造方法.
function Cat:New(name)
local obj = Animal:New(name)
setmetatable(obj, self)
self.__index = self
--self.name = name --这句父类中有不用再写
return obj
end
--子类当的普通方法.
function Cat:Eat(food)
print(self.name .. "吃:" .. food)
end
--通过子类实例化对象.
tom = Cat:New("汤姆")
tom:ToString()
tom:Eat("杰瑞")
print(tom.name)
5.类与对象代码分离
C#语言的面向对象开发中,一个类一般是一个独立的脚本。这些独立的脚本存在于命名空间内,我们只需要引入对应的命名空间,就可以访问到这些类。
下面我们用Lua模拟 C#进行类和对象的分离。
语法格式:dofile("[路径]脚本名.lua")
路径:
相对路径:就是相对于当前文件的一个路径位置。
注意事项:“…\”表示上一级目录。
绝对路径:就是我们电脑上的绝对地址,如“C:\aaa\bbb\ccc\ddd.lua”。
“路径”使用相对路径或者绝对路径都可以,这样我们就可以获取到其他Lua文件。一般都使用相对路径。
代码部分:
dofile("D:\\U3D_Project\\Lua\\19\\Lua\\19\\class\\Animal.lua") --绝对路径
dofile("..\\class\\Person.lua") --相对路径
tom = Animal:New("汤姆")
tom:ToString()
mk = Person:New("mkcode", 88, '男', "北京海淀")
mk:ToString()
module函数用法require用法这里面有介绍菜鸟教程