C#のインターフェースについて
下記コードのビルドが通らず困っています。
public class TestClass : IBase, IExpansion1, IExpantion2
{
public T Get<T>() where T : IBase
{
return this;
}
}
public interface IBase {}
public interface IExpansion1 : IBase {}
public interface IExpantion2 : IBase {}
具体的には return this; のところで型変換ができないと怒られます。
思惑としては、
他のクラスがTestClassの機能を使うのに実体そのまま使うのではなく、
利用クラスごとに適切なinterface(IExpansion1, IExpantion2)を取得し、
それを通して使って欲しいと考えています。
その中で、interfaceの提供に一々メソッドを作るのもなんだかなと思うので、
ジェネリックなGetメソッドを作りIBaseで型制約をかけようとしたのですが、
うまくいきません。
まず、これがビルドが通らない理由ですが
「TestClassが全てのIBaseを実装/継承しているclass/interfaceを継承/実装しているとは限らないから」
なのかなと思ったのですが、その認識は正しいでしょうか?
そうだとしたら、上記のような思惑がある場合、どのような設計にしたら良いのでしょうか?
interface一つ一つに取得メソッドを作るしかないのでしょうか?
よろしくお願いします。