如何为Page和UserControl创建基类?

Aar*_*ide 5 c# asp.net inheritance

Page和UserControl的基类:

public class MyWebPage : System.Web.UI.Page { }

public class MyUserControl : System.Web.UI.UserControl { }
Run Code Online (Sandbox Code Playgroud)

帮助他们中的任何一个可能使用:

void SetSessionValue<T>(string key, T value) { Session[key] = value; }
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现以下内容?

public class WebObject // can't inherit from both Page and UserControl { 
   protected void SetSessionValue<T>(string key, T value) { 
      Session[key] = value; 
   }
}  

public class MyWebPage : WebObject { }

public class MyUserControl : WebObject { }
Run Code Online (Sandbox Code Playgroud)

更新:我很兴奋第二个希望我可以这样解决它,但唉它不编译.

public class WebObject<T> : T
{
}
public class MyWebPage : WebObject<System.Web.UI.Page>
{
}
Run Code Online (Sandbox Code Playgroud)

kpr*_*bst 4

你不能。反正不容易。我建议只为页面和用户控件创建一个基类,并在两者中复制通用代码。Page由于用户控件包含在页面中,因此您还可以通过将属性强制转换为您自己的类型,将基本用户控件类中的方法委托给基本页面类:

// Code in the MyUserControlBase class
public int SomeCommonMethod() {
    return ((MyBasePageType)this.Page).SomeCommonMethod();
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过创建由两个基类实现的接口并使用 DI 拦截方法和属性访问器调用(然后将其路由到实际提供实现的某种常见代理类)来让您的生活变得悲惨。我可能不会去那里:)