Saya semakin dalam ke obat generik dan sekarang memiliki situasi yang saya perlu bantuan. Saya mendapatkan kesalahan kompilasi pada kelas 'Berasal' di bawah ini seperti yang ditunjukkan pada judul subjek. Saya melihat banyak posting lain yang mirip dengan ini tetapi saya tidak melihat hubungan. Bisakah seseorang memberi tahu saya cara mengatasi ini?
using System;
using System.Collections.Generic;
namespace Example
{
public class ViewContext
{
ViewContext() { }
}
public interface IModel
{
}
public interface IView<T> where T : IModel
{
ViewContext ViewContext { get; set; }
}
public class SomeModel : IModel
{
public SomeModel() { }
public int ID { get; set; }
}
public class Base<T> where T : IModel
{
public Base(IView<T> view)
{
}
}
public class Derived<SomeModel> : Base<SomeModel> where SomeModel : IModel
{
public Derived(IView<SomeModel> view)
: base(view)
{
SomeModel m = (SomeModel)Activator.CreateInstance(typeof(SomeModel));
Service<SomeModel> s = new Service<SomeModel>();
s.Work(m);
}
}
public class Service<SomeModel> where SomeModel : IModel
{
public Service()
{
}
public void Work(SomeModel m)
{
}
}
}
Jawaban:
Saya tidak dapat repro, tetapi saya menduga bahwa dalam kode aktual Anda ada batasan di suatu tempat yang
T : class
- Anda perlu menyebarkannya untuk membuat kompiler bahagia, misalnya (sulit untuk mengatakan dengan pasti tanpa contoh repro):sumber
Anda mendapatkan kesalahan ini jika Anda terpaksa
T
menjadi seorangclass
sumber
Jika Anda meletakkan batasan pada kelas atau metode umum, setiap kelas umum atau metode lain yang menggunakannya harus memiliki "setidaknya" batasan tersebut.
sumber