fork download
  1. using System;
  2.  
  3.  
  4. internal class Program
  5. {
  6. private static void Main(string[] args)
  7. {
  8. var A = new MyStruct(5); // можно обьявить так
  9.  
  10. MyStruct B;
  11. B.X = 5;
  12. B.Y = 100; // а можно и так (а в C# 6.0 уже не компилится, ну да ладно)
  13.  
  14. MyStruct? C = null; // и даже так с nullable
  15.  
  16. Console.WriteLine(A is ValueType); // всегда наслудется от ValueType
  17.  
  18. Console.WriteLine(A);
  19.  
  20. Do(A);
  21.  
  22. Console.WriteLine(A);
  23.  
  24. }
  25.  
  26. static void Do(MyStruct x)
  27. {
  28. x.X = 100;
  29. Console.WriteLine(x + " inside method");
  30. }
  31.  
  32.  
  33.  
  34. interface IInterface
  35. {
  36. int DoNothing(int x);
  37. }
  38.  
  39. struct MyStruct:IInterface // наследоваться явно нельзя, а интерфейсы - пожалуйста
  40. {
  41.  
  42. public int X { get; set; }
  43. public int Y { get; set; }
  44. public static int Z;
  45.  
  46. /* public MyStruct() --так нельзя
  47.   {
  48.  
  49.   }*/
  50.  
  51. public MyStruct(int x) // а так можно
  52. {
  53. X = x;
  54. Y = 0; // при инициализации должны быть определены все поля кроме статичных и констант
  55. }
  56.  
  57. public MyStruct(int x, int y): this(x) // и даже так можно
  58. {
  59. Y = y;
  60. }
  61.  
  62. public int DoNothing(int x)
  63. {
  64. return x;
  65. }
  66.  
  67. public override string ToString()
  68. {
  69. return X + " " + Y;
  70. }
  71. }
  72.  
  73. // struct MyStruct2: MyStruct {} -- так нельзя
  74.  
  75. }
  76.  
  77.  
  78.  
Success #stdin #stdout 0.04s 23928KB
stdin
Standard input is empty
stdout
True
5 0
100 0 inside method
5 0