C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DelegateとPropertyについて


(過去ログ 15 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■5588 / inTopicNo.1)  DelegateとPropertyについて
  
□投稿者/ yamyam (1回)-(2007/07/18(Wed) 19:25:59)

分類:[VB.NET] 

2007/07/18(Wed) 19:33:30 編集(投稿者)

WindowsXP Pro SP2 JP
VS2005 SP1適用
言語はVBを使用しています。

初めて投稿させて頂きます。

デリゲートを使用したコードを作成していたときに思ったのですが、
Propertyのgetter/setterにはデリゲートを適用できないのでしょうか?

普通にDelegateを使うとgetterとsetterの区別がつかなくなるので
Sub/Functionプロシージャのように簡単に適用できない事はわかっているんですが・・・
(そもそもDelegateステートメントにはSubかFunctionしか記述できないんですけどね)

"setterのようなSub(あるいはFunction)プロシージャ"を使うしかないんでしょうか?
引用返信 編集キー/
■5589 / inTopicNo.2)  Re[1]: DelegateとPropertyについて
□投稿者/ 黒龍 (84回)-(2007/07/18(Wed) 19:49:00)
delegateの適用箇所が見えましぇん・・・。
delegateに対してのset、getってことじゃないですよね?set、getを実施するロジックをdelegateでってことならそれぞれの中でdelegateを呼び出してやればいかがでしょ?
引用返信 編集キー/
■5592 / inTopicNo.3)  Re[1]: DelegateとPropertyについて
□投稿者/ 魔界の仮面弁士 (349回)-(2007/07/18(Wed) 19:57:13)
No5588 (yamyam さん) に返信
> デリゲートを使用したコードを作成していたときに思ったのですが、
> Propertyのgetter/setterにはデリゲートを適用できないのでしょうか?

# 「デリゲートを適用する」というのが、どういう状態を指すのか掴みきれなかったので…外してるかも。


Public Class Form1
 Private _SampleProperty As Integer = 777
 Public Property SampleProperty() As Integer
  Set(ByVal value As Integer)
   _SampleProperty = value
  End Set
  Get
   Return _SampleProperty
  End Get
 End Property

 Delegate Sub PropSetDelegate(ByVal value As Integer)
 Delegate Function PropGetDelegate() As Integer

 Private setter As PropSetDelegate
 Private getter As PropGetDelegate

 Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  With Me.GetType().GetProperty("SampleProperty")
   getter = DirectCast([Delegate].CreateDelegate(GetType(PropGetDelegate), _
     Me, .GetGetMethod(True)), PropGetDelegate)
   setter = DirectCast([Delegate].CreateDelegate(GetType(PropSetDelegate), _
     Me, .GetSetMethod(True)), PropSetDelegate)
  End With
 End Sub

 Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  Me.SampleProperty = 1234
  Trace.WriteLine(Me.SampleProperty)
  Trace.WriteLine(getter())
  setter(9876)
  Trace.WriteLine(Me.SampleProperty)
  Trace.WriteLine(getter())
 End Sub
End Class
引用返信 編集キー/
■5593 / inTopicNo.4)  Re[2]: DelegateとPropertyについて
□投稿者/ yamyam (2回)-(2007/07/18(Wed) 20:09:02)
2007/07/18(Wed) 20:17:28 編集(投稿者)

No5589 (黒龍 さん) に返信
> delegateの適用箇所が見えましぇん・・・。
これは自分で書いてても思った事なんです。
DelegateをPropertyのような感覚で使えるかなぁと考えたので。

イメージとしては、

Public Delegate Sub dlgA(ByVal value As Object) ''
Public Delegate Function dlgB(ByVal value As Object) As Object''
Public Delegate Property dlgC(ByVal value As Object) As Object'' 構文エラー(当たり前ですが…)

の様な感じだと面白いかなと思ったのです。
setter/getterのみのPropertyも存在するので動作が怪しくなるという気はしてますが。


> delegateに対してのset、getってことじゃないですよね?set、getを実施するロジックをdelegateでってことならそれぞれの中でdelegateを呼び出してやればいかがでしょ?
どちらかというと、"delegateに対してのset、get"になるかと…。
変な事を考えているのは承知の上なんですけどね。



下記ブログにて自分と同様のことを書かれていたので、いかがなものかなぁと思ったんですが。
*下記内容の投稿がまずければ削除します。
*あるいは管理者の方で削除してもらっても構いません。
.Net放浪記録
http://d.hatena.ne.jp/iltc/20070607
2007-06-07 [.Net]VBでSetterへのデリゲート




引用返信 編集キー/
■5594 / inTopicNo.5)  Re[2]: DelegateとPropertyについて
□投稿者/ yamyam (3回)-(2007/07/18(Wed) 20:33:57)
No5592 (魔界の仮面弁士 さん) に返信

これに近い方法は自分も考えたことがあります。

> With Me.GetType().GetProperty("SampleProperty")
ただ、上記の部分でプロパティ名を文字列で指定しいるので
プロパティの名前を変更したときに修正が必要になるなぁと思った次第でして…。
ついでに、リフレクションを使った場合でも似たようなことがありました。
引用返信 編集キー/
■5596 / inTopicNo.6)  Re[3]: DelegateとPropertyについて
□投稿者/ 魔界の仮面弁士 (350回)-(2007/07/18(Wed) 20:44:02)
2007/07/18(Wed) 20:46:52 編集(投稿者)
No5593 (yamyam さん) に返信
>  Public Delegate Property dlgC(ByVal value As Object) As Object'' 構文エラー(当たり前ですが…)

もし仮に、そのような構文が許可されていたとしたら、利用時に混乱が生じるような気も。

  Dim a As dlgA = Subへのデリゲートインスタンス
  a(obj1)         'Sub の呼び出し

  Dim b As dlgB = Functionへのデリゲートインスタンス
  obj3 = b(obj2)  'Function の呼び出し

 'Dim c As dlgC = Propertyへのデリゲートインスタンス
 'c = obj4        'Property Set の呼び出しなのか、デリゲート変数への代入なのか?
 'obj5 = c        'Property Get の呼び出しなのか、デリゲート変数からの取得なのか?

引用返信 編集キー/
■5599 / inTopicNo.7)  Re[4]: DelegateとPropertyについて
□投稿者/ yamyam (4回)-(2007/07/18(Wed) 21:49:51)
No5596 (魔界の仮面弁士 さん) に返信
> 2007/07/18(Wed) 20:46:52 編集(投稿者)
>
> ■No5593 (yamyam さん) に返信
>> Public Delegate Property dlgC(ByVal value As Object) As Object'' 構文エラー(当たり前ですが…)
>
> もし仮に、そのような構文が許可されていたとしたら、利用時に混乱が生じるような気も。

確かにそうですねぇ。
下記のような記述ができればDelegate変数とProperty(setter/getter)の区別がつくかもしれませんけど、
そもそも構文エラーですし、この書き方自体に本末転倒という感じが漂ってます(^^

c.Set = obj4 '' Property Set
obj5 = c.Get '' Property Get

他に、[Read/Write]Onlyのキーワードも識別する必要がありますしね。


No5592 (魔界の仮面弁士 さん)
> With Me.GetType().GetProperty("SampleProperty")
このような際に対象となるプロパティ名(文字列)を取得できれば
何とかなるかなぁとは思っているのですが…。


魔界の仮面弁士さんの方法か、setterに相当するSub/Functionを用いる
等が妥当な所なんでしょうか?

*リフレクションを使用した際もプロパティ名を文字列で与えていて、
やってることは似たようなものでしたので。




引用返信 編集キー/
■5609 / inTopicNo.8)  Re[3]: DelegateとPropertyについて
□投稿者/ 黒龍 (85回)-(2007/07/18(Wed) 23:57:44)
ん〜コンポーネントにしちゃってPublic Event dlgC(ByVal value As Object)だけ入れとくとかじゃないんですよね。すんませんやっぱりわかりませんでした。

引用返信 編集キー/
■5613 / inTopicNo.9)  Re[1]: DelegateとPropertyについて
□投稿者/ 渋木宏明(ひどり) (275回)-(2007/07/19(Thu) 03:37:23)
渋木宏明(ひどり) さんの Web サイト
> デリゲートを使用したコードを作成していたときに思ったのですが、
> Propertyのgetter/setterにはデリゲートを適用できないのでしょうか?

具体的に、どんな問題・不都合があってそういうことがしたいと思ったのでしょうか?
質問内容から意図が汲み取れないので、どう回答してよいのやら。

単純に言えば、既にコメントがついているように「出来ません」になります。
引用返信 編集キー/
■5615 / inTopicNo.10)  Re[2]: DelegateとPropertyについて
□投稿者/ yamyam (6回)-(2007/07/19(Thu) 09:22:54)
2007/07/19(Thu) 09:23:43 編集(投稿者)

No5613 (渋木宏明(ひどり) さん) に返信
>>デリゲートを使用したコードを作成していたときに思ったのですが、
>>Propertyのgetter/setterにはデリゲートを適用できないのでしょうか?
>
> 具体的に、どんな問題・不都合があってそういうことがしたいと思ったのでしょうか?
> 質問内容から意図が汲み取れないので、どう回答してよいのやら。
>
> 単純に言えば、既にコメントがついているように「出来ません」になります。

Sub/FunctionをDelegate経由で使っているときに、Propertyも同じように使えるのでは?
と思いついただけでして…。
クラスや構造体で同じ型のPropertyが複数あり、元のクラス等を意識せずに
同様の操作ができるかなぁと。使い道があるかは非常に怪しいです。

MSDNのDelegateの項目にはそのような構文はできない旨がありましたので、
その際は「無理か…」と放置してました。

その後、前述のブログでの記述を見まして、同じような事を考えた方がいるのかと
思い、「何か方法があるのでは?」と考えたためです。
*こちらの方はInvoke絡みでしたが、「プロパティを呼び出すデリゲートを作りたい」
ということでしたので。


やはり結論は「出来ない」という事ですね。
一応「解決」としておきたいと思います。
このような話題に投稿して下さった皆様、ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -