Có cách nào để xác định loại biến được chuyển làm đối số cho phương thức không? Hãy xem xét các lớp:Delphi: xác định loại thực tế của một generic?
TSomeClass = class
procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;
với việc thực hiện phương pháp
procedure TSomeClass.AddToList<T, U>(Element: T; List: U);
begin
if Element is TInt then
List.AddElement(TInt.Create(XXX))
else if Element is TString then
List.AddElement(TString.Create(YYY));
end;
nơi TInt.Create() và TString.Create() có bộ khác nhau của các đối số, tuy nhiên, cả hai đều kế thừa từ TDataType.
Bây giờ, tôi biết không thể sử dụng is
-operator như thế này, nhưng có một giải pháp thay thế hợp pháp làm những gì tôi yêu cầu ở đây không?
Nếu điều đầu tiên bạn làm trong mã chung là viết mã loại cụ thể cho mỗi giá trị chung chung có thể, thì bạn không viết mã chung nữa. Đây không phải là nơi để sử dụng Generics. –
Cảm ơn Rob đầu vào. Khi tôi đăng câu hỏi tại SO (và các địa điểm khác), tôi thường đưa ra các phiên bản ngu ngốc của mã thực sự của mình. Việc giải nén bản chất của vấn đề là, theo kinh nghiệm của tôi, hữu ích hơn việc trình bày mã thực tế - mã thường phức tạp hơn nhiều. Vì vậy, hãy xem xét mã trên một minh họa về một vấn đề lớn hơn. Btw: Tôi muốn đọc về một giải pháp thay thế cho mã trên. Vui lòng xem câu hỏi tiếp theo của tôi: http://stackoverflow.com/questions/1761487/delphi-generics-and-is-operator-problem. Tôi đang mong chờ bất kỳ đầu vào nào trên bài đăng đó! :) – conciliator