Revision Difference
From_Lua_to_CSharp#528899
<cat>Dev.Intro</cat>
<title>From Lua to C#</title>
<warning>This article is a work in progress. Please consider not making any changes to it at the moment.</warning>
# 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
int a = 100;⤶
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"] = () => { }⤶
};⤶
```
# 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
}
}
```⤶
```