Ok, tôi có một số lớp khác nhau xuất phát từ một lớp cơ sở. Lớp cơ sở này là một phương thức trừu tượng chứa commom.Sử dụng kiểu dẫn xuất trong lớp trừu tượng cơ sở
Một trong các phương pháp là phương pháp Copy
, nên có mặt trong tất cả các lớp dẫn xuất, vì vậy, tôi đã đặt nó trong lớp cơ sở. NHƯNG, tôi muốn nó trả lại derived type
không phải là cơ sở cũng không phải đối tượng.
Các giải pháp tôi đã cho rằng, đang sử dụng một loại paramter:
abstract class CopyableClass<T>
{
public abstract T Copy();
}
class DerivedClass : CopyableClass<DerivedClass>
{
public override DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
Vì vậy, mục đích chính ở đây là để
Hủy bỏ tham số gõ vào lớp cơ sở và vẫn còn làm cho phương thức trả về kiểu dẫn xuất tương ứng.
Một cách giải quyết khác.
Điều tốt nhất tôi có thể làm cho đến nay là một trong những ý kiến dưới đây, nhưng nó vẫn sử dụng một tham số chung
abstract class BaseClass
{
//base methods not related to deriving type
}
interface ICopyable<T>
{
T Copy();
}
class DerivedClass : BaseClass, ICopyable<DerivedClass>
{
public DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
Vì vậy, câu hỏi của bạn là gì? – evanmcdonnal
có thể triển khai tốt hơn điều này dưới dạng giao diện chung không? –
cách loại bỏ tham số kiểu trong lớp cơ sở và vẫn làm cho phương thức trả về kiểu dẫn xuất tương ứng. –