Tôi cố gắng để làm như sau:Tại sao tôi không thể thực thi các lớp dẫn xuất để có các hàm tạo tham số?
class Program
{
static void Main(string[] args)
{
foo<baz> fooObject = new foo<baz>();
AnotherClass<baz> _baz = new AnotherClass<baz>();
_baz.testMethod(fooObject);
}
}
public class AnotherClass<T> where T : bar
{
public void testMethod(foo<T> dummy)
{
foobar = dummy;
}
private foo<T> foobar = null;
}
public class foo<T> where T : bar, new()
{
public foo()
{
_t = new T();
}
private T _t;
}
public abstract class bar
{
public abstract void someMethod();
// Some implementation
}
public class baz : bar
{
public override void someMethod()
{
//Implementation
}
}
Và tôi nhận được một lỗi giải thích rằng 'T' phải là một loại phi trừu tượng với một constructor parameterless nào để sử dụng nó như là tham số 'T' trong loại hoặc phương pháp chung. Tôi hoàn toàn hiểu tại sao điều này phải, và cũng hiểu rằng tôi có thể truyền một đối tượng được khởi tạo trước kiểu 'T' vào làm đối số hàm tạo để tránh phải 'mới' nó, nhưng có cách nào xung quanh điều này không? cách nào để thực thi các lớp bắt nguồn từ 'bar' để cung cấp các hàm tạo parameterless?
Cố định - Tôi đã thiếu ràng buộc 'mới()' trên AnotherClass().
Cảm ơn, điều này dường như đã sửa nó! –