Tôi có một tình huống thú vị nơi tôi muốn sử dụng một lớp cơ sở sử dụng một tham số kiểu để thực hiện một giao diện và cũng giữ mọi thứ KHÔ với các lớp kế thừa.Thực hiện chung giao diện với loại được chỉ định
public interface ICalculator
{
void Process(ICalculationModel calculationModel);
}
public abstract class CalculatorBase<T> :ICalculator where T : ICalculationModel
{
// Compiler moans that Process(ICalculationModel calculationModel) isn't implemented
public abstract void Process(T calculationModel);
}
public class PipeworkInspections : CalculatorBase<GasSafetyModel>
{
public override void Process(GasSafetyModel documentModel){
//snip
}
}
Có điều gì đó tôi thiếu với mệnh đề 'where' chung hay gì đó không? Trong đầu của tôi điều này sẽ làm việc. Hay trình biên dịch cần chính xác thực hiện giống như định nghĩa giao diện?
Tôi không thể dễ dàng di chuyển thông số loại vào ICalculator vì có rất nhiều nơi mà nó được sử dụng mà không cần bất kỳ yêu cầu nào cho chung.
Đã xóa mọi thứ. Cảm ơn bạn về thông tin. Bây giờ rõ ràng là một giải pháp là làm cho giao diện lấy tham số kiểu. Tuy nhiên ICalculator được sử dụng ở một số nơi và được tham chiếu chỉ là ICalculator
Bây giờ tôi nhận được lỗi trình biên dịch nếu tôi bỏ qua tham số kiểu trong Giao diện tham chiếu đến ICalculator ... Có cách nào để kiến trúc sư này hoạt động không !?
Tôi tin rằng nó phải giống với cách nó xuất hiện trong 'ICalculator'. Tuy nhiên, kể từ khi tôi làm chủ yếu là công cụ Java và không C#, tôi không thể nói rằng chắc chắn. – Powerlord
Điều này không thể làm việc kể từ khi bạn có thể làm 'ICalculator c = new PipeworkInspections(); c.Process (new OtherModel()) 'không an toàn. Điều tốt nhất bạn có thể làm sẽ là implmement 'ICalculator.Process' và sau đó cast bên trong việc thực hiện chung. – Lee