ph91.de
  • Home
  • About me
  • Categories
    • Software Development
    • New Zealand
    • Music
    • Tech & IT
    • Sports
    • Dublin
    • Junk
  • Contact
  • Disclaimer
ph91.de
ph91.de
  • Home
  • About me
  • Categories
    • Software Development
    • New Zealand
    • Music
    • Tech & IT
    • Sports
    • Dublin
    • Junk
  • Contact
  • Disclaimer
  • Software Development

Unexpected C# Behaviour

  • 16. September 2018
  • Philipp

I recently stumbled across the unexpected behavior of C# when dealing with static variables. I put it a green unit test:

private static string a = $"a{b}";
private static string b = $"b{2+100}";
private static string c = $"{b}c";

[Test]
public void Test()
{
Assert.AreEqual("a",a);
Assert.AreEqual("b102c", c);
Assert.AreEqual(10, ReturnSum()(2,3));
}

As C# has an ECMA definition, this behavior is described in there (reference found here):


17.11: The execution of a static constructor is triggered by the first of the following events to occur within an application domain:

  • An instance of the class is created.
  • Any of the static members of the class are referenced.

If a class contains the Main method (§10.1) in which execution begins, the static constructor for that class executes before the Main method is called. If a class contains any static fields with initializers, those initializers are executed in textual order immediately prior to executing the static constructor (§17.4.5).

 


Despite that, it is quite weird that the compiler doesn’t warn you if a static member is referencing a static member which is executed later.

 

Related Topics
  • c#
  • compiler
  • ecma
  • language
  • static
Philipp

Previous Article
  • Tech & IT

Configure a postfix mailserver correctly (1blu)

  • 10. September 2018
  • Philipp
View Post
Next Article
  • Software Development

Design Patterns Game

  • 30. April 2019
  • Philipp
View Post
266 comments

Comments navigation

Older comments
  1. Georgedut says:
    27. October 2025 at 21:23

    https://t.me/s/bs_1Win/835

  2. Georgedut says:
    27. October 2025 at 23:43

    https://t.me/s/bs_1Win/696

  3. Georgedut says:
    28. October 2025 at 00:52

    https://t.me/bs_1Win/439

  4. Georgedut says:
    28. October 2025 at 02:03

    https://t.me/s/bs_1Win/964

  5. Georgedut says:
    28. October 2025 at 03:12

    https://t.me/s/bs_1Win/1080

  6. Georgedut says:
    28. October 2025 at 04:26

    https://t.me/s/bs_1Win/886

  7. Georgedut says:
    28. October 2025 at 05:40

    https://t.me/s/bs_1Win/1063

  8. Georgedut says:
    28. October 2025 at 06:53

    https://t.me/bs_1Win/320

  9. Georgedut says:
    28. October 2025 at 08:04

    https://t.me/bs_1Win/901

  10. Georgedut says:
    28. October 2025 at 09:15

    https://t.me/bs_1Win/528

  11. Georgedut says:
    28. October 2025 at 10:33

    https://t.me/s/bs_1Win/468

  12. CalvinQuarp says:
    28. October 2025 at 12:08

    https://t.me/s/Official_mellstroy_casino/9

  13. CalvinQuarp says:
    28. October 2025 at 13:23

    https://t.me/s/Official_mellstroy_casino/34

  14. CalvinQuarp says:
    28. October 2025 at 14:43

    https://t.me/s/Official_mellstroy_casino/22

  15. RouletteRogue says:
    28. October 2025 at 15:11

    https://t.me/s/Beefcasino_rus/30

  16. CalvinQuarp says:
    28. October 2025 at 15:55

    https://t.me/s/Official_mellstroy_casino/52

Comments navigation

Older comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Dev profiles
  • BitBucket
  • Github
  • Stackoverflow
Side Projects
  • NMF
  • Speed-kini.de
  • Sudoku Solver
  • Windwarner
Archive
ph91.de
Blog by Philipp Schreitmüller

Input your search keywords and press Enter.