Tôi đang thử nghiệm với các ràng buộc chung. Khi khai báo một ràng buộc trên một lớp như vậy:C# Giao diện Contraints
public class DocumentPrinter<T> where T : IFooDoc
Tôi có thể truy cập phương thức được khai báo bởi IFooDoc trong các phương thức của lớp DocumentPrinter. Tuy nhiên, nếu tôi làm DocumentPrinter thực hiện một giao diện mà tuyên bố contraint, ví dụ:
public interface IDocumentPrinter<T> where T : IFooDoc
{
void Add(T fooDoc);
void PrintFoos();
}
và sau đó tuyên bố DocumentPrinter như vậy:
public class DocumentPrinter<T>: IDocumentPrinter<T>
thuộc tính/phương pháp của trường IFooDoc không còn có sẵn trong các phương pháp của máy in Tài liệu. Dường như tôi phải khai báo rõ ràng ràng buộc giao diện trên chính lớp đó nếu tôi truy cập các thành viên được khai báo theo kiểu.
Tôi có hiểu điều này một cách chính xác hoặc có thể khai báo ràng buộc trên giao diện và có sự ràng buộc đó do lớp học thực hiện không?
Điều này là gây hiểu lầm, bạn không phải thêm ràng buộc vào lớp để có thể truy cập vào các thành viên, bạn phải thêm nó cho mã để biên dịch. – svick
@svick: Câu hỏi như đã nêu là "* Tôi có hiểu điều này một cách chính xác hoặc có thể khai báo ràng buộc trên giao diện và có sự ràng buộc mà lớp đó nhận ra không? *" Không chắc chắn câu trả lời của tôi là sai lạc. Nếu bạn * phải khai báo ràng buộc * như tôi đã chỉ rõ trên câu trả lời của tôi, có một ẩn * nếu bạn không, mã sẽ không biên dịch * vì bất cứ lúc nào bạn không làm điều gì đó mà ngôn ngữ * yêu cầu * bạn phải làm , bạn có mã sẽ không biên dịch. Nhưng một lần nữa, câu hỏi là * tôi có phải làm điều này không, hay có cách nào để làm điều đó mà không rõ ràng. * Tôi trả lời câu hỏi đó. Downovting? – jason
Câu hỏi cho biết: “Có vẻ như tôi phải khai báo rõ ràng ràng buộc giao diện khi chính lớp đó * nếu tôi truy cập các thành viên được khai báo theo loại *.” Với tôi, điều đó cho thấy OP * không nhận ra mã đã thắng 't biên dịch *. Đó là lý do tại sao tôi nghĩ điều quan trọng là phải nhấn mạnh điều đó. – svick