投稿者 Jaip  (社会人) 投稿日時 2012/2/10 02:21:39
お世話になります。いつも参考させていただいております。

拡張メソッドについて確認したいことがあります。

1.拡張メソッドのエディタ表示の際にオブジェクトを引数にして呼び出すときは非表示にして、
拡張メソッドとして呼び出すときは表示するということは可能でしょうか、
EditorBrowsableAttributeのEditorBrowsableState.Neverだとどちらの場合も非表示にされてしまいます。
出来なくて困るわけではなく、単なる好奇心レベルの質問です。

Module ExtendsModule


<Extension()>
Public Sub exMethod(ByVal X As Class1)
'略 
End Sub


End Module

Dim x As New Class1
'エディタ非表示 
exMethod(x)
'エディタ非表示 
ExtendsModule.exMethod(x)
'エディタ表示 
x.exMethod()



2.VBではインクリメント/デクリメントがないので下記のような拡張メソッドを作成してみて動作は確認したのですが、
拡張メソッドにByRefを使用している例がみないので、使ってはいけない規約とかあるのでしょうか?

Module ExtendsModule

<Extension()>
Public Function PreIncrement(ByRef a As IntegerAs Integer
a += 1
Return a
End Function

<Extension()>
Public Function AftIncrement(ByRef a As IntegerAs Integer
Dim b As Integer = a
a += 1
Return b
End Function

End Module

(1)
Dim i As Integer = 1
Dim j As Integer

j = i.PreIncrement 'i = 2, j = 2 
(2)
Dim i As Integer = 1
Dim j As Integer
j = i.AftIncrement 'i = 2, j = 1 



以上よろしくお願いいたします。