相关疑难解决方法(0)

C#是否支持返回类型协方差?

我正在使用.NET框架,我真的希望能够创建一个我所有网站都使用的自定义类型的页面.当我尝试从控件访问页面时出现问题.我希望能够返回我的特定类型的页面而不是默认页面.有没有办法做到这一点?

public class MyPage : Page
{
    // My own logic
}

public class MyControl : Control
{
    public MyPage Page { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# covariance

76
推荐指数
2
解决办法
2万
查看次数

为什么C#4.0中的类没有通用方差?

如果我们有接口,为什么我们也没有它用于类?使用它时会产生什么问题?

.net c# generics c#-4.0

55
推荐指数
1
解决办法
4119
查看次数

为什么C#在实现接口时不允许继承返回类型

有没有合理的理由说明为什么下面的代码在C#中不合法?

class X: IA, IB
{
    public X test() // Compliation Error, saying that X is not IB
    {
        return this;
    }
}

interface IA 
{
    IB test();
}
interface IB { };
Run Code Online (Sandbox Code Playgroud)

.net c#

23
推荐指数
3
解决办法
3179
查看次数

.NET 4.0协方差

在回答另一个问题时,我试图做到以下几点.我不认为我正确地解释了这个问题,但我确实想知道下面是否可能以某种方式(我的尝试失败),如果不是为什么不:

    public class MyBaseClass { }

    public class MyClass : MyBaseClass { }

    public class B<T> { }

    public class A<T> : B<T> { }

    static void Main(string[] args)
    {
        // Does not compile
        B<MyBaseClass> myVar = new A<MyClass>();
    }
Run Code Online (Sandbox Code Playgroud)

我认为这可以使用具有协变类型参数的通用接口来工作:

    interface IB<out T> { }

    public class B<T> : IB<T> { }
Run Code Online (Sandbox Code Playgroud)

但我错了,这也行不通.

编辑

正如SLaks指出的那样'接口是协变的; 上课不是.' (感谢SLaks).所以现在我的问题是为什么?这个设计背后的想法(我认为Eric Lippert的一个想法)是不可能的,不受欢迎的还是在'也许是一天'的名单上?

.net c# generics covariance

9
推荐指数
1
解决办法
928
查看次数

关于子类返回类型的C#协方差

有谁知道为什么C#不支持协变返回类型?即使在尝试使用接口时,编译器也会抱怨它是不允许的.请参阅以下示例.

class Order
{
    private Guid? _id;
    private String _productName;
    private double _price;

    protected Order(Guid? id, String productName, double price)
    {
        _id = id;
        _productName = productName;
        _price = price;
    }

    protected class Builder : IBuilder<Order>
    {
        public Guid? Id { get; set; }
        public String ProductName { get; set; }
        public double Price { get; set; }

        public virtual Order Build()
        {
            if(Id == null || ProductName == null || Price == null)
                throw new InvalidOperationException("Missing required data!");

            return …
Run Code Online (Sandbox Code Playgroud)

.net c# inheritance covariance

7
推荐指数
3
解决办法
6052
查看次数

标签 统计

c# ×5

.net ×4

covariance ×3

generics ×2

c#-4.0 ×1

inheritance ×1