Как в C# определить свойство, принимающее параметры, или функцию, возвращающую ссылку, как в C++?C#

Место общения программистов C#
Ответить
Anonymous
 Как в C# определить свойство, принимающее параметры, или функцию, возвращающую ссылку, как в C++?

Сообщение Anonymous »

Я написал небольшую функцию C#, которая вычисляет двоичное умножение целого числа на 10.
Текущий код приведен ниже.

Код: Выделить всё

public static UInt32_Register Mul10(UInt32_Register rA)
{
UInt32_Register rX = 0;
byte sum = 0;
byte report = 0;

rX[0] = 0;
rX[1] = rA[0];
rX[2] = rA[1];

for (int i = 3; i < 32; i++)
{
sum = (byte) (report + rA[i - 1] + rA[i - 3]);

if (sum > 1)
{
report = 1;
rX[i] = 0;
}
else
{
report = 0;
rX[i] = sum;
}
}
return rX;
}
Чтобы использовать rX[nIndex], я определил класс Uint32_Register, в котором определен конкретный индексатор.
Код UInt32_Register следующий

Код: Выделить всё

    public struct UInt32_Register
{
private UInt32 iValue;

public static implicit operator UInt32_Register(UInt32 value)
{
return new UInt32_Register { iValue = value };
}

public static implicit operator UInt32(UInt32_Register value)
{
return value.iValue;
}

public byte this[int index]
{
get
{
// return value of bit in position 'index' as 'byte' integer
return (byte)((iValue >> index) & 1);
}
set
{
// assign bit value to 1 or 0
if (value == 1)
{
iValue = iValue | ((UInt32)1 = 0; i--)
{
if (R.FromTo(n-1,i) >= D)
{
Q[i] = 1;
R.FromTo(n-1,i) = R.FromTo(n-1,i) - D;

Код: Выделить всё

FromTo()Функция 
работает правильно в операторе if и в правой части присваивания в последней строке.
Но последняя строка неверна в левой части присваивания.
Как определить свойство, которое принимает 2 параметра?
Я попробовал следующий код,

Код: Выделить всё

       public UInt32 FromToX_1test
{
get(int iFrom, int iTo)
{
int nShiftLeft = 8 * sizeof(UInt32) - 1 - iFrom;
int nShiftRight = nShiftLeft + iTo;
UInt32 nX = (iValue > nShiftRight;
return nX;
}
set(int iFrom, int iTo, byte value)
{
...
}
}
}
и следующий код

Код: Выделить всё

       public UInt32 FromToX_2test(int iFrom, int iTo)
{
get
{
int nShiftLeft = 8 * sizeof(UInt32) - 1 - iFrom;
int nShiftRight = nShiftLeft + iTo;
UInt32 nX = (iValue > nShiftRight;
return nX;
}
set
{
...
}
}
но компилятор C# отказывается от обоих уже на уровне «свойства» get().
Что мне нужно сделать, чтобы записать следующее присваивание без ошибок при компиляции?

Код: Выделить всё

R.FromTo(n-1,i) = R.FromTo(n-1,i) - D;
Возможно, можно найти решение, используя ключ ref C#, но я не знаю, как это сделать!
Внимание: я не ищу решение для своего алгоритма реализации. Части алгоритма умножения и деления приведены в качестве примеров.

Подробнее здесь: https://stackoverflow.com/questions/798 ... hat-return
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»