C# Перегрузка операций преобразования типов
Можно ли в классе определить перегрузку преобразования типов другого типа?
Пример:
В классе определено свойство public float[][] Matrix {get; set;}
Мне нужно получать доступ к каждому элементу массива без индексации.
Для этого я могу определить свойство public float* M1 {get; set;} которое хранит адрес первой ячейки.
Можно ли перегрузить оператор преобразования типа для float*?
Что бы я мог делать так. this.M1 = 4f а внутри он изменяет значение по адресу и с получением значения также.
Или как еще можно реализовать подобное без явных указаний индексов элементов и дублирования кода?
Ответы (1 шт):
В случае с матрицей используйте "управляемые указатели", т. е. ссылки:
public double[,] Matrix { get; }
public ref double M1 => ref Matrix[0, 0];
В случае с матрицей вы только зря тратите память, используйте свой struct/class:
public struct /*or `class`*/ Matrix
{
public static readonly Matrix Identity = <...>;
public double M1 { get; set; }
<...>
}
float[][] является не матрицей, а вложенным (jagged) массивом, т. е. массивом массивов. Т. к. матрицы бывают только NxM, а вложенные массивы могут выглядеть вот так:
[1 57 44 -18 11]
[5]
[]
null
[40 2]
…то использовать вложенные массивы не целесообразно.