Мне нужно создать структуру, которая выглядит как int (но имеет дополнительное поле, которое мне нужно ...), поэтому я создал новую структуру с именем TestStruct, добавил один метод (test ()), который мне был нужен, и перегрузил некоторые операторы, и это, кажется, работает хорошо ...
Пример ниже показывает проблему. Если метод struct test () выполняется из свойства Val, то свойство Val, похоже, теряет значение, но если метод выполняется для переменной Val2, этот, похоже, сохраняет правильное значение ...
Почему это происходит?
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
new TestClass();
}
}
public class TestClass
{
public TestStruct Val { get; set; }
private TestStruct Val2;
public TestClass()
{
Val.test();
Console.WriteLine(Val + "-> why is it not 10?");
//Direct assignment works well...
Val = 123;
Console.WriteLine(Val + "-> direct assingment works..");
//This way works too. Why doesn't it work with "get;" and "set;"?
Val2.test();
Console.WriteLine(Val2 + "-> it works this way");
}
}
public struct TestStruct
{
private Int32 _Value;
public long Offset { get; set; }
public static implicit operator TestStruct(Int32 value)
{
return new TestStruct { _Value = value };
}
public static implicit operator Int32(TestStruct value)
{
return value._Value;
}
public void test()
{
_Value = 10;
}
}