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 {} -- так нельзя
}
dXNpbmcgU3lzdGVtOwoKCmludGVybmFsIGNsYXNzIFByb2dyYW0KewogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIEEgPSBuZXcgTXlTdHJ1Y3QoNSk7IC8vINC80L7QttC90L4g0L7QsdGM0Y/QstC40YLRjCDRgtCw0LoKCiAgICAgICAgTXlTdHJ1Y3QgQjsKICAgICAgICBCLlggPSA1OwogICAgICAgIEIuWSA9IDEwMDsgLy8g0LAg0LzQvtC20L3QviDQuCDRgtCw0LogKNCwINCyIEMjIDYuMCDRg9C20LUg0L3QtSDQutC+0LzQv9C40LvQuNGC0YHRjywg0L3RgyDQtNCwINC70LDQtNC90L4pCgoJCU15U3RydWN0PyBDID0gbnVsbDsgLy8g0Lgg0LTQsNC20LUg0YLQsNC6INGBIG51bGxhYmxlIAoKICAgICAgICBDb25zb2xlLldyaXRlTGluZShBIGlzIFZhbHVlVHlwZSk7IC8vINCy0YHQtdCz0LTQsCDQvdCw0YHQu9GD0LTQtdGC0YHRjyDQvtGCIFZhbHVlVHlwZQoKICAgICAgICBDb25zb2xlLldyaXRlTGluZShBKTsKCiAgICAgICAgRG8oQSk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKEEpOwoKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBEbyhNeVN0cnVjdCB4KQogICAgewogICAgICAgIHguWCA9IDEwMDsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSh4ICsgIiBpbnNpZGUgbWV0aG9kIik7CiAgICB9CgoKCiAgICBpbnRlcmZhY2UgSUludGVyZmFjZQogICAgewogICAgICAgIGludCBEb05vdGhpbmcoaW50IHgpOwogICAgfQoKICAgIHN0cnVjdCBNeVN0cnVjdDpJSW50ZXJmYWNlICAvLyDQvdCw0YHQu9C10LTQvtCy0LDRgtGM0YHRjyDRj9Cy0L3QviDQvdC10LvRjNC30Y8sINCwINC40L3RgtC10YDRhNC10LnRgdGLIC0g0L/QvtC20LDQu9GD0LnRgdGC0LAKICAgIHsKCiAgICAgICAgcHVibGljIGludCBYIHsgZ2V0OyBzZXQ7IH0KICAgICAgICBwdWJsaWMgaW50IFkgeyBnZXQ7IHNldDsgfQogICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IFo7CgogICAgICAgIC8qIHB1YmxpYyBNeVN0cnVjdCgpICAgLS3RgtCw0Log0L3QtdC70YzQt9GPCiAgICAgICAgICAgewoKICAgICAgICAgICB9Ki8KCiAgICAgICAgcHVibGljIE15U3RydWN0KGludCB4KSAvLyAg0LAg0YLQsNC6INC80L7QttC90L4KICAgICAgICB7CiAgICAgICAgICAgIFggPSB4OwogICAgICAgICAgICBZID0gMDsgLy8g0L/RgNC4INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNC4INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQvtC/0YDQtdC00LXQu9C10L3RiyDQstGB0LUg0L/QvtC70Y8g0LrRgNC+0LzQtSDRgdGC0LDRgtC40YfQvdGL0YUg0Lgg0LrQvtC90YHRgtCw0L3RggogICAgICAgIH0KCiAgICAgICAgcHVibGljIE15U3RydWN0KGludCB4LCBpbnQgeSk6IHRoaXMoeCkgLy8g0Lgg0LTQsNC20LUg0YLQsNC6INC80L7QttC90L4KICAgICAgICB7CiAgICAgICAgICAgIFkgPSB5OwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGludCBEb05vdGhpbmcoaW50IHgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFggKyAiICIgKyBZOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gc3RydWN0IE15U3RydWN0MjogTXlTdHJ1Y3Qge30gICAtLSDRgtCw0Log0L3QtdC70YzQt9GPIAogIAp9CgoK