Tôi có một giao diện ISnack
khi được thực hiện bởi một lớp, nó sẽ có một hàm tạo tham số mặc định. Về cơ bản:Có cách nào để thực thi hàm tạo không tham số không có ràng buộc chung không
public interface ISnack<T> where T : new()
{
}
Tôi sử dụng <T> where T : new()
chỉ để thực thi hàm tạo tham số.
Sau đó tôi sẽ thực hiện giao diện như sau:
public class Cutlet : ISnack<Cutlet>
{
}
này hoạt động và nó chỉ đơn giản là đảm bảo Cutlet
lớp có một constructor parameterless.
Bây giờ tôi có một lớp cơ sở trừu tượng Kitchen
:
public abstract class Kitchen<T> where T : ISnack
{
}
Yêu cầu là Kitchen
nên có hạn chế nơi T
phải là một ISnack
. Nhưng điều này sẽ không hoạt động vì không tồn tại ISnack
, nhưng chỉ ISnack<T>
.
Nếu tôi cố gắng này
public abstract class Kitchen<T> where T : ISnack<T>
{
}
nó sẽ không biên dịch ('T' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ISnack<T>'
) và cũng sẽ không có ý nghĩa trong bối cảnh của tôi.
Nếu tôi có thể buộc ISnack
s để có một constructor parameterless mà không kìm hãm bởi một tham số T
loại, sau đó T
trong Kitchen<T>
có thể dễ dàng trở thành một ISnack
. Làm thế nào để đi về nó?
Marc, Ditto! bạn đã vạch ra tất cả những gì tôi đã thử .. Hmmm thời gian chạy là tùy chọn tôi có tôi đoán – nawfal
@nawfal Nếu nó ok, bạn có thể thêm một đối số chung thứ hai cho nhà bếp và điều này sẽ làm việc: 'abstact class Kitchen trong đó T: ISnack
trong đó S: new() ' –@FelixK. bạn có thể làm cho nó một câu trả lời nữa không? – nawfal