下記コードのビルドが通らず困っています。

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一つ一つに取得メソッドを作るしかないのでしょうか?

よろしくお願いします。