これは良い考えであるかどうかにかかわらず、実行する関数が呼び出しオブジェクトの型を認識しているインターフェイスを実装することは可能ですか?C#で呼び出しオブジェクトタイプを決定する
class A
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class B
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class C
{
public int DoSomething(int input)
{
if(GetType(CallingObject) == A)
{
return input + 1;
}
else if(GetType(CallingObject) == B)
{
return input + 2;
}
else
{
return input + 3;
}
}
}
これは悪いコーディング習慣であるように(パラメータが変更されませんが、出力があろうから)が、それはさておき、それが可能であることは、私には思えますか?
いくつかの特定の種類の関数を呼び出せるようにしたいのですが、関数へのアクセスを除外できません。 私は
DoSomething(int input, Type callingobject)
「タイプ」パラメータを持っていることについて考えた。しかしメソッドGetType(B)とは対照的に、呼び出し元のオブジェクトは関係なく、自分のタイプのBを偽装するために、メソッドGetType(これ)を使用するという保証はありません。
これはコールスタックを調べるのと同じように単純な(比較的単純な)ものでしょうか?
EDIT
JaredParの答え(あなたがしたい場合)だけでなく、ジョンFeminellaのを投票してください。私は両方の答えを受け入れることができませんでした。私が以前に考えていなかった解決策をもたらしたJaredの答えとは対照的に、私が求めたものであるため、John Feminellaの答えを受け入れました。
あなたはもう少し背景を与えてもらえますか?なぜ、C.DoSometingAとC.DoSomethingBのような何か別のメソッドを実装するだけではないのです。それ以上は良いですが、A&Bクラスの振る舞いです。 –
短いバージョンでは、1〜2行だけで30〜40個の同じ機能を持つことになります。 – DevinB
@devinb:下記の私の投稿に行った編集を見てください。あなたは別の質問を開くことを検討したいかもしれません。 –