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

わんくま同盟

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

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


■87764 / )  Re[2]: 別フォームにデータを渡したい
□投稿者/ いまそかり (3回)-(2018/06/28(Thu) 16:58:08)
No87757 (にゃるら さん) に返信

にゃるらさん、回答ありがとうございます。


>>@Form1_LoadをprivateのままでForm2で取得し、使用したい
> 
> ある型のメンバを呼び出すのに、Reflectionが使えます。
> 
>   http://smdn.jp/programming/netfx/reflection/
> 
> privateなインスタンスメンバであれば
> 
>   BindingFlags.NonPublic | BindingFlags.Instance
> 
> の条件をつけることでアクセスできます。


なるほどそういう方法があったんですね!
早速書いてみました。

Dim fType As Type = Form1.GetType()

        Dim f2 As New Form2()

        fType.InvokeMember("Form1_Load",
                           BindingFlags.NonPublic Or
                           BindingFlags.Instance Or
                           BindingFlags.InvokeMethod,
                           Nothing,
                           From1,
                           New Object() {Form1, f2}
                           )


参考(https://dobon.net/vb/dotnet/programing/invokenonpublicmember.html
「隠蔽されている非パブリックメンバを呼び出す」)

これで合ってますかね…?




>>AForm2でForm1_Loadだけを取得した場合、(※1)は正常に動作するのか
> 
> 正常の意味がよくわからないですが、呼び出そうとする処理の中に
> 状態や変数のライフタイムなどが関係ないようなものであれば
> 大丈夫じゃないでしょうか。
> 
> ちなみに余計なお世話ですけども。
> 「素人」というのが本当なのであれば、privateでなくpublicだけで実装されるのが無難と思いますよ。
> 動くプログラムを作られてからカプセル化に挑戦する方が良いと思いますよ。


あ、すみません「正常」という言葉は「エラーは出ないのか?」という意味で使ったので、その解釈であってます。
「素人」という言葉も「初心者」という意味合いで使っていました。
 
また、以前「基本はPublicではなくPrivateで書いたほうがいい」と授業で習った覚えがあったので、
Privateで記述していました。
でも、まずはにゃるらさんの言う通りPublicでやった方がやりやすいかもですね…。
次回からはその方法も試してみます。

返信 編集キー/


管理者用

- Child Tree -