現在、インタフェースXを継承するインタフェースYをインタフェースYに継承するオブジェクトを渡すときに、次のエラーメッセージが表示されます。インタフェースXを実装するオブジェクトを、インタフェースXから継承するインタフェースYに渡すときのエラー。C#
は、暗黙的に にタイプ 'InterfaceTestApp.Repositories.IUserModel' を変換できません 'InterfaceTestApp.Lib.IUserModel'。明示的な変換が存在する( あなたはキャストが欠けている?)
は、これは私のテストのセットアップです:
namespace InterfaceTestApp.Repositories
{
public class UserTestRepo
{
public IUserModel GetUser() => new UserModel() { Id = 1, Name = "Test" };
}
}
namespace InterfaceTestApp.Repositories
{
public interface IUserModel
{
int Id { get; set; }
string Name { get; set; }
}
public class UserModel : IUserModel
{
public int Id { get; set; }
public string Name { get; set; }
}
}
ライブラリ
namespace InterfaceTestApp.Lib
{
interface IUserModelLib : Repositories.IUserModel { }
}
namespace InterfaceTestApp.Lib
{
class Authentication
{
public IUserModelLib AuthenticateUser() => new Repositories.UserTestRepo().GetUser();
}
}
基本的に
リポジトリ私は何ですか?ここでやろうとしているのは、Libプロジェクトを使用してRepoプロジェクトのどの部分にもアプリケーションが公開されないようにすることです。ご覧のとおり、IUserModelLibは単にパススルーインターフェースです。レポ・プロジェクトのIUserModelからすべてを継承します。
何らかの手動キャスティングをせずにこれを行う方法があるはずです。どんな助けもありがとう。ありがとう!
'IUserModelLib'は' IUserModel'ができることはできますが、その逆はできません。 'IUserModelLib AuthenticateUser()'メソッドから 'IUserModel'を返そうとしましたが、' IUserModel'はそれ自身の宣言の中に 'IUserModelLib'が持つ機能を持っていないので、エラーメッセージです。 – Sam