Hãy xem xét các giao diện sau:Thực hiện một giao diện chung thiếu ràng buộc mới
public interface IFoo
{
M Bar<M>();
}
Đang cố gắng để thực hiện điều đó với
class Foo : IFoo
{
public M Bar<M>()
{
return new M();
}
}
không hoạt động, trình biên dịch phàn nàn các M
thiếu chế new()
.
Khi tôi thêm các hạn chế như trong
class Foo : IFoo
{
public M Bar<M>() where M : new()
{
return new M();
}
}
điều này vẫn không làm các trick, như những hạn chế của Foo.Bar
không phù hợp với những hạn chế của phương pháp giao diện bây giờ (và tôi không thể thay đổi cái đó).
Các documentation for the compiler error CS0425 nói
Để tránh lỗi này, hãy chắc chắn rằng các mệnh đề where là giống hệt nhau trong cả hai tờ khai, hoặc thực hiện giao diện một cách rõ ràng.
Nếu "triển khai giao diện rõ ràng" là giải pháp: Làm cách nào để thực hiện?
Đây có phải là vì bạn cần trả lại tài khoản mới hoặc bạn cần trả lại thứ gì đó khi không có gì khác để trả lại? 'Default (M)' có đủ tốt không? Nó trả về giá trị mặc định cho một kiểu generic đã cho, cho các tham chiếu này là 'null'. Nếu không, bạn sẽ cần một trong hai cây biểu thức hoặc sự phản chiếu để tạo ra cá thể của bạn. –