DOBON.NET DOBON.NETプログラミング掲示板過去ログ

キャストについて

環境/言語:[VB.NET、.NET Frameworkのバージョン1.1]
分類:[.NET]

こんにちは。下記のように○○○の部分にclsABCのデータ型を取得して
変換するような書き方はできないでしょうか。

Dim test AS Object = CType(clsABC, ○○○)
■No14884に返信(ふたばさんの記事)
> こんにちは。下記のように○○○の部分にclsABCのデータ型を取得して
> 変換するような書き方はできないでしょうか。
>
> Dim test AS Object = CType(clsABC, ○○○)
>

出来ないと思います。
場合分けしてキャストしなければならないとすれば,例えば次の様になると思います。

Dim Obj As Object
If TypeOf Obj Is Button Then
Dim Btn As Button = CType(Obj, Button)
ElseIf TypeOf Obj Is CheckBox Then
Dim Btn As CheckBox = CType(Obj, CheckBox)
End If
ありがとうございます。clsABCは元になるクラスから派生したクラスで
○○○はそのままclsABC型というクラス名になるのですが、数も多く、
今後増える可能性があるので一度に処理できればと思ったのですが、
型の定義を事前に書けるかどうか考えてみます。
すいません、ここのページのTipsを見ていたら、InvokeMemberメソッドで
クラスのメンバが呼び出せるということなのでとりあえず派生元のクラス
変数で定義しておいて、InvokeMemberメソッドで各クラスを操作したいと
思います。お騒がせしました。
解決済み!
■No14887に返信(ふたばさんの記事)
> ありがとうございます。clsABCは元になるクラスから派生したクラスで
> ○○○はそのままclsABC型というクラス名になるのですが、数も多く、
> 今後増える可能性があるので一度に処理できればと思ったのですが、
> 型の定義を事前に書けるかどうか考えてみます。

基底クラスでキャストすれば良いだけだと思いますが。

> 変数で定義しておいて、InvokeMemberメソッドで各クラスを操作したいと思います。

メソッドを呼び出したいんですね。
では、インターフェイスを勉強なさってはいかがでしょう。


__________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
確認しましたところ、現状出来上がっているクラス群に手を入れるのは
難しいとの回答でしたので、今回はInvokeMemberメソッドでの対応になり
そうです。(やはり一般的には設計段階で組み込んでもらわないと厳しい
のでしょうか。)

> では、インターフェイスを勉強なさってはいかがでしょう。

がんばってみます。情報ありがとうございました。
禁じ手だとは思いますが,遅延バインディングと言う手もあります。
とにかくObjectにつっこんでしまえば,どんなメソッドでも呼び出せます。
> 禁じ手だとは思いますが,遅延バインディングと言う手もあります。
> とにかくObjectにつっこんでしまえば,どんなメソッドでも呼び出せます。

なるほど。Option Strictオプションはクラスごとに指定できるようですが、
例えば全体の開発ルールとしてはOption Strict Onでも遅延バインディング
を行いたい処理のみOption Strict Offのクラスに格納するというような開発
は一般的に行われるのでしょうか。(あまり実務の開発経験がないため初歩的
なことかも知れませんが)
■No14939に返信(ふたばさんの記事)
> なるほど。Option Strictオプションはクラスごとに指定できるようですが、
> 例えば全体の開発ルールとしてはOption Strict Onでも遅延バインディング
> を行いたい処理のみOption Strict Offのクラスに格納するというような開発
> は一般的に行われるのでしょうか。(あまり実務の開発経験がないため初歩的
> なことかも知れませんが)

"型" は CLR の主役なので一般的とは言えないでしょう。
遅延バインディングは、COM Interop 系でやむなくということが稀にある程度です。
今回のような場合にはインターフェイスを使います。

「使えるものから逃げる」必要性も感じませんし。

___________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/

DOBON.NET | プログラミング道 | プログラミング掲示板