質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ReSharper

ReSharperは、VisualStudio向け開発補助ツールです。VisualStudioにコーディングやメンテナンスの機能を追加することができます。VB.NETやC#向けですが、JavaScriptやTypeScriptなどへの機能提供も可能です。

Q&A

解決済

2回答

2307閲覧

インターフェース変数にセットされるクラスの調べ方[Visual Studio2013(C#)(ReSharperインストあり)]

FUJITOMO37

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ReSharper

ReSharperは、VisualStudio向け開発補助ツールです。VisualStudioにコーディングやメンテナンスの機能を追加することができます。VB.NETやC#向けですが、JavaScriptやTypeScriptなどへの機能提供も可能です。

0グッド

1クリップ

投稿2016/09/17 01:56

インターフェース用の変数にセットされるクラスを調べる為、呼び出し先コードを掘っていくケースが多々あります。。(ブレークポイントで特定する方が早いケースもあります。。)
下記の様なコードがあった時、変数にセットされるクラスをすぐに特定する方法があれば教えて下さい。
※ReSharperが入っています。

//testに入るクラス型を一瞬で特定する方法はないでしょうか?
ITest test = service.TestCreate(this);

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

htsignさんとのやり取りを見て回答しています。

自分が確認させていただきたいのは、コードを実行していない時に、クラス型を確認する方法です。

非常に残念なのですが、本質的にはできません。
TestCreate()の中で何かの設定値や入力値を使って生成するクラスを変えることが可能です。コードを実行していない時にはその設定値や入力値は(当たり前ですが)分かりませんので、どんなクラスが生成されるのか決定できません。
従って、実行していない時にtestに設定されるクラスを知るすべはありません。

しかし、設定される可能性のあるクラスをリストすることなら不可能ではないと思います。
ReShaperについてはよく知りませんが一種の静的コード解析ツールのようですね。そのようなツールであればもしかすると全ての分岐を解析してtestに設定され得る全てのクラスを洗い出してくれる可能性はありますね。ここで知っている人から回答がなければReShaperのサポートへ問い合わせるのが確実と思います。

なお、コードを実行している時であればブレークして確認することはできる筈です。
C#では実際にやったとはないのでちゃんと回答できないのですが、C++ではローカル変数ウィンドウで確認できました。
C#でもマウスでポイントする、ローカル変数ウィンドウを見る、ウォッチするのどれかで確認できるのではないかと思います。

投稿2016/09/18 04:25

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FUJITOMO37

2016/09/18 05:59

ご回答、ありがとうございます。 一週間ほど待って、ご回答なければ、ReShaperのサポートへ問い合わせを検討することにしました。
guest

0

csharp

1Type type = test.GetType();

でいいのではないかと思います。

投稿2016/09/18 01:53

htsign

総合スコア870

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FUJITOMO37

2016/09/18 02:59

ご回答ありがとうございます。 質問内容が、分かりにくく申し訳ありません。 ご回答いただいた内容ですと、コードを実行する必要があるかと。。 自分が確認させていただきたいのは、コードを実行していない時に、クラス型を確認する方法です。
htsign

2016/09/18 03:05

なるほど、そういうことでしたら私ではお役に立てません。 しかし、その例で言う ITest を実装したクラスは静的に特定する必要があるほど多岐に渡っているのですか? 通常であれば is 演算子でコード的に振り分ければ済むと思うのですが…。 もしあまりにも多いようならそうなる原因の設計の方を見直すべきではないでしょうか。
FUJITOMO37

2016/09/18 03:26

設計については、MVVMという仕組みを使っていて、まだよく分かっていないです。。 自分のコード例が安易でした。。申し訳ありませんでした。
htsign

2016/09/18 03:32

あー、チームが書いたコードの保守とかですかね。失礼しました。 お力にはなれませんが、細やかながら応援させていただきます。
FUJITOMO37

2016/09/18 03:36

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問