123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- .. _doc_c_sharp_differences:
- API differences to GDScript
- ===========================
- This is a (incomplete) list of API differences between C# and GDScript.
- General Differences
- -------------------
- As explained in the :ref:`doc_c_sharp`, C# generally uses ``PascalCase`` instead
- of the ``snake_case`` in GDScript and C++.
- Global Scope
- ------------
- Available under ``Godot.GD``.
- Some things were moved to their own classes, like Math and Random. See below.
- Global functions like ``print``, ``var2str`` and ``weakref`` are located under
- ``GD`` in C#.
- ``ERR_*`` constants were moved to ``Godot.Error``.
- Math
- ----
- Math functions like ``abs``, ``acos``, ``asin``, ``atan`` and ``atan2`` are
- located under ``Mathf`` instead of in global scope.
- ``PI`` is ``Mathf.PI``
- Random
- ------
- Random functions like ``rand_range`` and ``rand_seed`` are located under ``Random``,
- so use ``Random.RandRange`` instead of ``rand_range``.
- Export keyword
- --------------
- Use the ``[Export]`` attribute instead of the GDScript ``export`` keyword.
- Signal keyword
- --------------
- Use the ``[Signal]`` attribute instead of the GDScript ``signal`` keyword.
- This attribute should be used on a `delegate`, whose name signature will be used to define the signal.
- .. code-block:: csharp
- [Signal]
- delegate void MySignal(string willSendsAString);
- See also: :ref:`c_sharp_signals`
- Singletons
- ----------
- Singletons provide static methods rather than using the singleton pattern in C#.
- This is to make code less verbose and similar to GDScript. Example:
- .. code-block:: csharp
- Input.IsActionPressed("ui_down")
- String
- ------
- Use ``System.String`` (``string``). All the Godot String methods are provided
- by the ``StringExtensions`` class as extension methods. Example:
- .. code-block:: csharp
- string upper = "I LIKE SALAD FORKS";
- string lower = upper.ToLower();
- There are a few differences though:
- * ``erase``: Strings are immutable in C#, so we cannot modify the string
- passed to the extension method. For this reason ``Erase`` was added as an
- extension method of ``StringBuilder`` instead of string.
- Alternatively you can use ``string.Remove``.
- * ``IsSubsequenceOf``/``IsSubsequenceOfi``: An additional method is provided
- which is an overload of ``IsSubsequenceOf`` allowing to explicitly specify
- case sensitivity:
- .. code-block:: csharp
- str.IsSubsequenceOf("ok"); // Case sensitive
- str.IsSubsequenceOf("ok", true); // Case sensitive
- str.IsSubsequenceOfi("ok"); // Case insensitive
- str.IsSubsequenceOf("ok", false); // Case insensitive
- * ``Match``/``Matchn``/``ExprMatch``: An additional method is provided besides
- ``Match`` and ``Matchn``, which allows to explicitly specify case sensitivity:
- .. code-block:: csharp
- str.Match("*.txt"); // Case sensitive
- str.ExprMatch("*.txt", true); // Case sensitive
- str.Matchn("*.txt"); // Case insensitive
- str.ExprMatch("*.txt", false); // Case insensitive
- Basis
- -----
- Structs cannot have parameterless constructors in C#, therefore ``new Basis()``
- initializes all primitive members to their default value. Use ``Basis.Identity``
- for the equivalent to ``Basis()`` in GDScript and C++.
- The following methods were converted to properties with their respective names changed:
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- get_scale() Scale
- ================ ==================================================================
- Transform2D
- -----------
- Structs cannot have parameterless constructors in C#, therefore ``new Transform2D()``
- initializes all primitive members to their default value.
- Please use ``Transform2D.Identity`` for the equivalent to ``Transform2D()`` in GDScript and C++.
- The following methods were converted to properties with their respective names changed:
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- get_origin() Origin
- get_rotation() Rotation
- get_scale() Scale
- ================ ==================================================================
- Plane
- -----
- The following methods were converted to properties with their respective names changed:
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- center() Center
- ================ ==================================================================
- Rect2
- -----
- The following fields were converted to properties with their respective names changed:
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- end End
- ================ ==================================================================
- The following methods were converted to properties with their respective names changed:
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- get_area() Area
- ================ ==================================================================
- Quat
- ----
- Structs cannot have parameterless constructors in C#, therefore ``new Quat()``
- initializes all primitive members to their default value.
- Please use ``Quat.Identity`` for the equivalent to ``Quat()`` in GDScript and C++.
- Array
- -----
- *This is temporary. Array is ref-counted, so it will need its own type that wraps the native side.
- PoolArrays will also need their own type to be used the way they are meant to.*
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- Array object[]
- PoolIntArray int[]
- PoolByteArray byte[]
- PoolFloatArray float[]
- PoolStringArray String[]
- PoolColorArray Color[]
- PoolVector2Array Vector2[]
- PoolVector3Array Vector3[]
- ================ ==================================================================
- In some exceptional cases a raw array (``type[]``) may be required instead of a ``List``.
- Dictionary
- ----------
- *This is temporary. Array is ref-counted, so it will need its own type that wraps the native side.*
- Use ``Dictionary<object, object>``.
- Variant
- -------
- ``System.Object`` (``object``) is used in place of ``Variant``.
- Communicating with other scripting languages
- --------------------------------------------
- The methods ``object Object.call(string method, params object[] args)``,
- ``object Object.get(string field)`` and ``object Object.set(string field, object value)``
- are provided to communicate with instances of other
- scripting languages via the Variant API.
- Other differences
- -----------------
- ``preload``, ``assert`` and ``yield`` as they work in GDScript are currently
- not available in C#.
- Other differences:
- ================ ==================================================================
- GDScript C#
- ================ ==================================================================
- Color8 Color.Color8
- is_inf float.IsInfinity
- is_nan float.IsNaN
- dict2inst ? TODO
- inst2dict ? TODO
- load GD.load which is the same as ResourceLoader.load
- ================ ==================================================================
|