// T => a class
// I => Guid, int etc..
public interface IBaseX<T, I>
where T : BaseY<I> {..}
public class BaseX<T, I> : IBaseX<T, I>
where T : BaseY<I> {..}
// it works but,
public interface IMyClass<T, I>
where T : IBaseX<T, I> {..}
public class MyClass<T, I>
where T : BaseX<T, I>, IMyClass<T, I>
// this not works, why not?
エラー: 型Tがジェネリック型またはメソッドIBaseXで型パラメータTとして使用することはできません。は、2種類のインタフェースを継承し<T, I>
私のORMプロジェクトは、含まれてい:
は、いくつかの問題があり、イム書き込みが更新TからBaseY
へのボクシング変換やタイプパラメータ変換はありません、プロジェクトのルートに: BaseEntity.cs:
public abstract class BaseEntity<T>
{
public T ID { get; set; }
.....
}
コンテンツフォルダ: Page.cs:
public class Page : BaseEntity<int>
{
[MaxLength(250)]
[Required]
public string Title { get; set; }
....
}
PageComment.cs:私はdatalayerプロジェクトを持っている
public class PageComment : BaseEntity<int>
{
public int PageID { get; set; }
[Required]
[MaxLength(500)]
public string Body { get; set; }
[Required]
[MaxLength(175)]
public string Email { get; set; }
[Required]
[MaxLength(150)]
public string Title { get; set; }
....
}
、含まれています
ベースフォルダ:
IBaseDAL.cs:
public interface IBaseDAL<T, I> where T : BaseEntity<I>
{
void Save(T e, string who, WebsiteContext ctx = null);
void Update(T e, string who, WebsiteContext ctx = null);
void Delete(T e, string who, WebsiteContext ctx = null);
}
BaseDAL.cs :
public class BaseDAL<T, I> : IBaseDAL<T, I> where T : BaseEntity<I>
{
public void Save(T e, string who, WebsiteContext ctx = null) { ... }
}
コメントフォルダ:
ICommentDAL.cs:
public interface ICommentDAL<T> where T : BaseEntity<int>, IBaseDAL<T, int>
{
int Save(WebsiteContext ctx, NewCommentDTO nc, string who);
....
}
CommentDAL.cs:
public class CommentDAL<T>
where T : BaseEntity<int>, IBaseDAL<T, int>, ICommentDAL<T>
{
BaseDAL<T, int> baseDAL = new BaseDAL<T, int>();
public int Save(WebsiteContext ctx, NewCommentDTO<T> nc, string who)
{
ORM.Content.PageComment pc = new PageComment()
{
Body = nc.Body,
...
};
baseDAL.Save(pc as T, who, ctx);
}
}
ORM.Content.PageCommentクラスはT
として使用する必要がありますが、私が「T.」と書くと、BaseEntityフィールドに来る..
serviceLayerで、私はcommentDAL.Saveメソッドを呼び出します:
_commentDAL.Save(...);
どのように私は値commentDAL.SaveでTクラスを(渡すことができます)
をので、あなたは 'が' 'Tたい:BaseX {..}' ''や '' 'T:BaseY は{..}' ''? –
tym32167
ベースXのTはベースYである必要があります –
ジェネリックタイプの制約の「継承」はありません。ベースタイプまたはインターフェイスで必要な制約を明示的に含める必要があります。 –