2015-09-21 3 views
0

Я конвертирую старый VB.NET в C#. Среди более мелких проблем, с которыми я столкнулся, - как обрабатывать передачу больших объектов в методы. В VB мы будем использовать ключевое слово ByRef, как это:Const vs. Static в операторе switch

Friend Sub New(ByRef Parent As WorkSheet) 
     'INITIALIZE OBJECT 
     Me.WS = Parent 
     pColorId = 64 
     pZoomScale = 100 
    End Sub 

Но в C# есть длинный список ограничений, которые делают это не представляется возможным. Например, refs не может иметь значения по умолчанию, вы не можете передавать константу, null или this, потому что они доступны только для чтения.

Есть ли простое решение? Или вы просто игнорируете его и передаете все без квалификатора, и компилятор просто делает правильные вещи?

+1

прошу иметь в виду. –

+0

Это около 600 строк. Что-то в этом нуждается? –

+0

@MauryMarkowitz Вы действительно знаете, что означает 'ByRef'? Вам нужно только передать что-то 'ByRef', если вы хотите присвоить ему значение, которое также отображается вне функции. – Magnus

ответ

1

Вам не нужно передавать объекты по ref, все классы являются ссылочными типами и не должны передаваться ref в вашем случае.

Passing Reference Type Variables

переменной типа опорного не содержит его данные непосредственно; это содержит ссылку на его данные. Когда вы передаете параметр ссылочного типа по значению, можно изменить данные, на которые указывает ссылка, такая как значение члена класса.


Не следует путать понятие передачи по ссылке с концепцией ссылочных типов. Эти две концепции не совпадают. Параметр метода может быть изменен посредством ref независимо от того, является ли это типом значения или ссылочным типом . Нет бокса типа значения, когда он передается по ссылке.

0

В C# все ссылки на классы, которые производятся от object, копируются в метод. Когда вы передаете объектную ссылку на метод, вы работаете с фактическим переданным объектом.

Ключевое слово ref, на которое вы ссылаетесь, является ссылкой на ссылку, и вам нужно использовать это, только если вы планируете изменить (в вашем примере вам понадобится ref, если вы планируете установить Parent в null и хотели бы, чтобы это применялось вне метода).