C# Перегрузка операций преобразования типов

Можно ли в классе определить перегрузку преобразования типов другого типа?

Пример:

В классе определено свойство public float[][] Matrix {get; set;}

Мне нужно получать доступ к каждому элементу массива без индексации. Для этого я могу определить свойство public float* M1 {get; set;} которое хранит адрес первой ячейки.

Можно ли перегрузить оператор преобразования типа для float*?

Что бы я мог делать так. this.M1 = 4f а внутри он изменяет значение по адресу и с получением значения также.

Или как еще можно реализовать подобное без явных указаний индексов элементов и дублирования кода?


Ответы (1 шт):

Автор решения: return

В случае с матрицей используйте "управляемые указатели", т. е. ссылки:

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]

…то использовать вложенные массивы не целесообразно.

→ Ссылка