S&box Wiki

Revision Difference

From_Lua_to_CSharp#528891

<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 a C# starter guide meant for developers who are well familiar with Lua. There are some comparisons and code examples that will help you understand how to do things using C#. ## Why S&Box uses C# instead of Lua While Lua is flexible to an extent, easy to learn and build simple systems with, it lacks certain capabilities for creating solid scalable projects which are offered by C#. Lua was the best option at the time when Garry's Mod came around, but now it's the time to make a step further. # Comparison Not all of these code examples will compile and run as-is, some constructs are missing or simplified for less distraction and easier understanding of covered topics. ⤶ ## Top-level statements Things you can write in a file⤶ ⤶ **Lua**⤶ ```lua⤶ ⤶ # Top-level statements Things you can write in a file on the top level⤶ ⤶ ## Lua example⤶ ⤶ ```lua⤶ -- In lua you can have any code in a file on the top level, -- it will get executed when the file is processed. print('Hello!') function foo() return 100 end print(foo()) myGlobalTable = { hello = 'hello' } ``` ⤶ **C#**⤶ ```csharp⤶ ⤶ ## C# example⤶ ⤶ ```csharp⤶ // Currently in C# all you can have on the top level is imports // and type defenitions (classes, interfaces, enums, etc., possibly // scoped in namespaces). // You'll need to wrap all of your code into types, classes and their // methods in order to actually do something. It's simple - on the top // of the file you can only define things, but not allocate variables // or execute expressions. enum MyEnum { One, Two } namespace Boo { public class Foo { public int myInt; } } // The below code isn't allowed as a top-level expression and will not // compile int a = 100; Something.DoStuff(); ``` ⤶ ## Local and global variables ⤶ **Lua**⤶ ```lua⤶ ⤶ # Local and global variables ⤶ ## Lua example⤶ ⤶ ```lua⤶ -- Global variales are accessed from anywhere in the code globalVar = 100 -- Local variables are accessed in the current lexical scope local localVar = 100 ``` ⤶ **C#**⤶ ```csharp⤶ ⤶ ## C# example⤶ ⤶ ```csharp⤶ // MyClass.cs // No global variables, if you want a globally-accessed variable // you'll have to define it as a public static class member public class MyClass { public static int staticVar = 100; public static void DoStuff() { // This variable is local to the DoStuff method scope int a = 200; // You can also use '{' and '}' on their own to delimit // an arbitrary scoped code section { // This variable is local to the current arbitrary scope int a = 300; } Console.WriteLine(a); // 200 } } ``` ```csharp // Example.cs // We need to import the class in order to access its members using MyClass; public class Example { public void DoMoreStuff() { // This can be accessed from anywhere like this int boo = MyClass.staticVar; // This variable is local to the DoMoreStuff method scope int a = 100; } } ```