using System; internal class Program { private static void Main(string[] args) { var A = new MyStruct(5); // можно обьявить так MyStruct B; B.X = 5; B.Y = 100; // а можно и так (а в C# 6.0 уже не компилится, ну да ладно) MyStruct? C = null; // и даже так с nullable Console.WriteLine(A is ValueType); // всегда наслудется от ValueType Console.WriteLine(A); Do(A); Console.WriteLine(A); } static void Do(MyStruct x) { x.X = 100; Console.WriteLine(x + " inside method"); } interface IInterface { int DoNothing(int x); } struct MyStruct:IInterface // наследоваться явно нельзя, а интерфейсы - пожалуйста { public int X { get; set; } public int Y { get; set; } public static int Z; /* public MyStruct() --так нельзя { }*/ public MyStruct(int x) // а так можно { X = x; Y = 0; // при инициализации должны быть определены все поля кроме статичных и констант } public MyStruct(int x, int y): this(x) // и даже так можно { Y = y; } public int DoNothing(int x) { return x; } public override string ToString() { return X + " " + Y; } } // struct MyStruct2: MyStruct {} -- так нельзя }