小编Dee*_*pak的帖子

实现定义基类属性的接口时,为什么类实现接口不能返回派生类类型对象?

让我们创建一些接口

public interface ITimeEventHandler
    {
        string Open();
    }

    public interface IJobTimeEventHandler : ITimeEventHandler
    {
        string DeleteJob();
    }

    public interface IActivityTimeEventHandler : ITimeEventHandler
    {
        string DeleteActivity();
    }



    public interface ITimeEvent
    {
        ITimeEventHandler Handler { get; }
    }

    public interface IJobTimeEvent : ITimeEvent
    {
        int JobID { get;  }
    }
Run Code Online (Sandbox Code Playgroud)

创建一个类

public class JobTimeEvent : IJobTimeEvent
    {
        public int JobID
        {
            get; internal set;

        }

        public IJobTimeEventHandler Handler
        {
            get; internal set;
        }

    }
Run Code Online (Sandbox Code Playgroud)

我的问题是..当实现一个定义基类属性的接口时,为什么类实现接口不能返回派生类类型对象?

对于类JobTimeEvent中的ex,IJobtimeEvent需要一个ITimeEventHandler类型的属性,但为什么不允许从IimeEventHandler派生的IJobTimeEventHandler类型

c# inheritance

5
推荐指数
1
解决办法
2039
查看次数

设计以避免派生类中的类型转换?

public interface IBasePresenter
{
}
public interface IJobViewPresenter : IBasePresenter
{
}
public interface IActivityViewPresenter : IBasePresenter
{
}

public class BaseView 
{
    public IBasePresenter Presenter
    {
        get;
        set;
    }
}

public class JobView : BaseView
{
    public IJobViewPresenter JobViewPresenter
    {
        get { this.Presenter as IJobViewPresenter;}
    }
}

public class ActivityView : BaseView
{
    public IActivityViewPresenter ActivityViewPresenter
    {
        get { this.Presenter as IActivityViewPresenter;}
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们假设我需要在BaseView上使用IBasePresenter属性.现在这个属性是由JobView和ActivityView继承的,但是如果我需要在这些派生类中引用IJobViewPresenter对象,那么我需要输入转换IBasePresenter属性到IJobViewPresenter或IActivityPresenter(我想避免)或者在派生类上创建JobViewPresenter和ActivityViewPresenter(如如上所示).

我想避免在派生类中进行类型转换,仍然引用IJobViewPresenter或IActivityViewPresenter,并且在BaseView中仍然有IBasePresenter.

有没有办法实现它?

.net c# design-patterns

5
推荐指数
1
解决办法
1650
查看次数

标签 统计

c# ×2

.net ×1

design-patterns ×1

inheritance ×1