Ситуация
Я читал документы MSDN о том, что нового в C# 7.x до 8.0, и нашел эти статьи ( doc1 , doc2 )
, поэтому я решил создать небольшой тест.
Код
Pointer.cs
internal readonly unsafe struct Pointer<T>
where T : unmanaged
{
private readonly void* mValue;
internal Pointer(T value)
{
//fixed (T* val = &value) <--- Error: You cannot use the fixed statement to take the adress of an already fixed expression.
// mValue = val;
mValue = &value;
}
public static implicit operator Pointer<T>(T value)
{
return new Pointer<T>(value);
}
public static implicit operator string(Pointer<T> value)
{
var ptr = (T*)value.mValue;
return ptr->ToString(); // returns random values (maybe adresses).
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Pointer<int> ptr = 2;
Console.WriteLine(ptr); // prints random values (maybe adresses).
}
}
Проблема
Почему мне не разрешено использовать оператор fixed
в моем конструктор. Я имею в виду, что имеет смысл, что это выдает ошибку. Я сказал, что T
должно быть unmanaged
, поэтому я думаю, что оно автоматически использует ключевое слово fixed
для внутреннего использования. НО, если это так, то почему я получаю случайные значения.