Revision Difference
From_Lua_to_CSharp#528904
<cat>Dev.Intro</cat>
<title>From Lua to C#</title>
# What is this guide
This is meant to give an idea of the major differences between Lua and C#
# Comments
```lua
-- Lua comments start with two minus signs
--[[
Lua multiline comment
example
--]]
```
```csharp
// csharp comments start with two slashes, like most other languages
/*
csharp multiline comment
example
*/
```
# Global Variables
```lua
-- you can define globals anywhere
globalVar = 100
```
```csharp
public class MyClass
{
// globals need to be in a class
public static int GlobalVar = 100;
}
```
# Variable Types
```lua
-- Variables in Lua don't have a static type and can store any data
local a = 100
a = 'Hello'
a = function() print('Hi') end
```
```csharp
var a = 100; // Translated as "int a = 100;" because 100 is an int
a = "Hello"; // Error: can't assign a string to an int
```
# Numbers
```lua
local a = 100
a = 5.5
a = -300.1
```
```csharp
int a = -300;
uint b = 333333;
double c = -500.888;
```
# Collections
```lua
local stuff = {
1, 2, 3,
'Oh', 'Hi', 'Mark',
{ myFunc = function() end }
}
```
```csharp
var numbers = new int[3] { 1, 2, 3 };
var strings = new List<string> { "Oh", "Hi", "Mark" };
var functions = new Dictionary<string, Action>
{
["myFunc"] = () => { }
["myFunc"] = () => { }
};
```
# Member Access
In Lua anything is accessible from anywhere as long as you have a reference
```lua
-- myFile.lua
myTable = {
field = 100
}
```
```lua
-- otherFile.lua
print(myTable.field) -- 100
```
In C# things can be **public**, **private**, **protected** and **internal**
```csharp
// MyClass.cs
public class MyClass
{
public static void PublicMethod() { ... }
protected static void ProtectedMethod() { ... }
private static void PrivateMethod() { ... }
}
```
```csharp
// OtherClass.cs
public class OtherClass : MyClass
{
public static void Test()
{
MyClass.PublicMethod(); // OK
MyClass.ProtectedMethod(); // We inherit from MyClass so OK
MyClass.PrivateMethod(); // Error: PrivateMethod is private
}
}
```