Bir açılır etikette ByRef ve ByVal'a nasıl başvurulur? [kapalı]


9

Üzerindeki MSDN sayfası ByRefve ByValanahtar kelimeler çok yardımcı olmaz; bir şekilde atlamazsam, her yerde "anahtar kelime" olarak anılırlar.

Rubberduck projesinin ana katkıda bulunanlarından biri çok güzel bir Encapsulate Field refactoring üzerinde çalışıyor ve UI oldukça güzel bir şekilde geliyor .. hariç , "Erişilebilirlik" yazan ByRef/ByVal

Rubberduck'un "Alanı Kapsül" yeniden düzenleme iletişim kutusu

"Erişilebilirlik" i sevmiyorum çünkü daha doğru hissettirdiği Public/ Private/ Friendaccess değiştiricileri için başka bir yerde kullanıyorum .

IMO "erişim değiştirici" için kısa olduğu için "Değiştirici" kullanmak istemiyorum.

Bu etiketin doğru olmasını istiyorum, ancak kelime dağarcığım yok gibi görünüyor ve bu anahtar kelimeleri ne arayacağımı bilmiyorum.

Bu etiket doğru olmak için ne söylemeli? Aradığım kelime ne? Hangi "anahtar kelime ailesi" ne aittir ByRef/ ByValaittir?


2
Yorumlardan birinin söylediği gibi, hiç orada olmamalı - ByRef bir mülk için biraz deli. Mümkünse, bu kötüdür - arayanların değişkenlerini bilgisi olmadan değiştirmenize izin verir.
jmoreno

"VB Evreni" nde bir çok belge (yani, özellikle VBA değil) bunu "Geçiş Mekanizması" olarak adlandırmaktadır.
Damien_The_Unbeliever

@jmoreno Tamamen katılıyorum. Ben oluşturulan kodu el ile düzenleme ve "sorun çözüldü" dışında ByValbunu değiştirmek mümkün olmadan yapacağım ByRef! VBA biliyorsunuz muazzam miktarda kötü saçmalık derleme :-) yine de, nihayet bu anahtar kelimelere bir isim koyan çevrimiçi bir yer var gibi .
Mathieu Guindon

Yanıtlar:


14

Bu durumda, "Pass As" (veya "Pass") kullanırdım.

Bu kullanıma mükemmel şekilde uyan bir akışınız var.

  • Değişken adı : foo
  • Farklı gönder : ByVal / Pass: ByRef

Bu, iş akışınıza mükemmel bir şekilde uyuyor ve tesadüfen referans verdiğiniz makalenin tam olarak gösterdiği şeydir.

Seçeneklerinizi okuduğunuzda, başlığı farklı okuduğunuzda ve metni uygun şekilde seçebileceğiniz için "Farklı Gönder" i kullanırken mükemmel bir şekilde okur - "" Değişken adı "foo," Farklı Gönder "değeri.

Biraz daha iyi okumak istiyorsanız, hedef kitlenizin ByVal ve ByRef anahtar kelimelerine biraz daha az aşina olabilecek VBA programcıları veya VBA olmayan programcılar olup olmadığına bağlı olarak liste seçeneklerinizi "Değer" ve "Referans" yapabilirsiniz .

Alternatif olarak, "Pass:" olarak değiştirin ve açılır menüden "By Reference (ByRef)" ve "By Value (ByVal)" yapın. Açılır listenizde tüm bu metni gösterecek alan var gibi görünüyor. Veya yalnızca ByRef / ByVal anahtar kelimeleri.


" ByVal olarak Pass " veya "Değere göre Pass " kullanırdım. "ByVal'dan geçin" kulağa garip geliyor.
user253751

@immibis iyi çağrı!
enderland

3
Ayrıca, çok az seçenek olduğu için, açılan düğmeler yerine radyo düğmelerini de düşünebilirsiniz.
Kyralessa

@Kyralessa, Mat'ta da tam olarak söylediğim şey bu. Ve son tasarım için neler yaptıklarını düşünüyorum :-)
enderland

5

Aşağıdakileri seçerek bir açılır etiket etiketlemek için bu 3 terimlerin birini kullanabilirsiniz:

  1. semantik
  2. Geçmek
  3. Parametre değiştirici

"Anlambilim" i severim
Mathieu Guindon

"Parametre Değiştirici" yi seviyorum.

3

"Pass By Semantics" muhtemelen aradığınız şeye en yakın olanıdır.


Argh benim hızlı teslimat şapkamı çalıyor! Eeeeevil!
Jimmy Hoffa

2
Zaten bir tane var, sana bunu vermekten mutluluk duyuyorum ...
Oded

3

Bunun için en kesin ve biçimsel terim "Takma semantik" olacaktır.

Ne zaman ByRefya birine tüm değişiklikler diğerine anında görünür olan - kullanılır, işlevi içinde adı arayanın değişken için bir diğer adıdır. İle ByVal, işlevin içindeki ad arayanın değişkeninin ayrı bir kopyasıdır (elbette, hem arayanın hem de işlevin kopyası aynı nesneye atıfta bulunabilir, ancak işlevin içindeki parametreyi yeniden atamanın arayanın değişkenini yeniden atamamasından farklıdır ).

Seçenekler

  • Takma ad ( ByRef)
  • Kopyala ( ByVal)

Bazı platformlar, arayanın değişkeninin takma adının yapıldığı üçüncü bir olasılık ekler, ancak çakışan nesnelerin takma adı için birden fazla parametrenin kullanılmasına izin verilmez. (C restrictanahtar kelimesinin arkasındaki fikir , bunu aynı zamanda öznitelik anahtar kelimesinin bulunduğu IDL'de de bulur unique). .NET'in bu bilgiyi kodlamak için iyi bir yolu yoktur.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.