Tôi có một đối tượng (biểu mẫu) chứa một tập hợp (.Fields) mà tôi muốn chứa các phiên bản của một lớp chung chung (FormField).Bộ sưu tập các loại chung
Các FormField, đơn giản, được định nghĩa như vậy:
public class FormField<T>
{
private Form Form;
public T Value { get; set; }
public string Name { get; set; }
public void Process()
{
// do something
}
public FormField(Form form, string name, T value)
{
this.Name = name;
this.Value = value;
this.Form = form;
}
}
này cho phép tôi để có FormField, FormField vv và phần đó hoạt động tuyệt vời. Những gì tôi muốn là một bộ sưu tập của "Formfields" không phụ thuộc vào chủng loại, nhưng tôi buộc phải xác định một kiểu (có vẻ như) như:
public class Form
{
string Code { get; set; }
string Title { get; set; }
int Year { get; set; }
Guid ClientID { get; set; }
ICollection<FormField<int>> Fields { get; set; }
}
gì, tôi nghĩ rằng, tôi muốn là một giao diện cho phép tôi để tóm tắt các loại thông tin và do đó gõ bộ sưu tập như trường hợp của (ví exxample) IFormField không FormField <>
Nhưng tôi không thể nhìn thấy làm thế nào để xác định này mà không cần gõ mạnh việc thu thập trong giao diện ...
Bất kỳ trợ giúp nào (bao gồm mọi giải pháp thay thế!) Sẽ được đánh giá cao!
Cảm ơn, Ben
cảm ơn Jon, nhưng nếu tôi hiểu bạn một cách chính xác thì giao diện sẽ có hiệu quả mọi thứ nhưng thuộc tính giá trị, vốn là yếu tố then chốt của FormField ..? Tôi đang cố gắng sử dụng Generics theo cách sai? – Ben
@Ben: Hãy xem xét cách bạn sẽ cố gắng * sử dụng * bộ sưu tập này. Nó có thể có một hỗn hợp các kiểu trường biểu mẫu khác nhau (int, string, v.v.). Làm thế nào bạn sẽ cố gắng sử dụng các giá trị từ các trường biểu mẫu trong 'Biểu mẫu'? Bạn sẽ không biết chúng tại thời gian biên dịch, hoặc bạn sẽ được đúc một cách rõ ràng đến đúng loại. –
@Ben, bạn có thể khai báo thuộc tính Value trong giao diện IFormField, nhưng bạn sẽ phải khai báo nó là Object. Trong lớp FormField, khai báo giá trị là T và triển khai IFormField.Value một cách rõ ràng. –