Имеется простой на вид код:
/// <summary>
/// Description for video, audio tracks and subtitles.
/// It contains id, name (description string).
/// </summary>
public interface ITrack
{
/// <summary>
/// Track Id.
/// </summary>
int Id { get; }
/// <summary>
/// Track name.
/// </summary>
string Name { get; }
}
internal class TrackDescription : ITrack
{
public int Id { get; set; }
public string Name { get; set; }
}
internal unsafe struct Track
{
internal int Id;
internal IntPtr Name;
internal Track* Next;
public static unsafe implicit operator TrackDescription(Track track)
{
byte[] bytes = null;
int size = 0;
sbyte* bytePtr = (sbyte*)track.Name;
while (*bytePtr != 0)
{
size++;
bytePtr++;
}
Marshal.Copy(track.Name,bytes, 0, size);
return new TrackDescription
{
Id = track.Id,
Name = Encoding.UTF8.GetString(bytes)
};
}
public static unsafe implicit operator LinkedList<ITrack>(Track track)
{
Track* current = &track;
LinkedList<ITrack> list = new LinkedList<ITrack>();
while (current != null)
{
list.AddLast((TrackDescription)(*current));
current = current->Next;
}
return list;
}
}
Почему при добавлении в список элемента, мне приходится явным образом указывать каст к типу TrackDescription
который должен реализовать интерфейс?
Т.е. я не могу просто разыменовать указатель, и предположить вызов оператора преобразования list.AddLast((*current));
, ведь оператор помечен как implicit
, а толку от него нет?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть шар который я хочу вращать вокруг своей оси вперед
Возникла задача по реализации OAuth fat клиента при уже существующем серверном приложенииПроблема в том, что клиент может быть подключен к серверу...
Допустим, есть класс Player, который внутри себя хранит экземпляр интерфейса IWeapon
Мне нужно написать аналог Windows Service под Linux на MonoDevelop, который будет запускаться/завершаться из-под другой программы (как дочерний процесс)Реально...