我有几个继承自不同类的类.所有这些类都有一个会话属性(他们定义或继承).
我想为所有这些类添加一个属性:
public SessionObject SessionObject
{
get
{
return Session["SessionObject"] as SessionObject;
}
set
{
Session["SessionObject"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道怎么做.
我认为在C++中我可以使用模板,但我没有看到Generics这样做.
怎么做到呢?
您可以使用有限数量的选项来跨多种类型共享实现
如果所有对象已共享一个公共基类,请将其添加到那里.如果他们根本不使用继承,你可以定义一个基类 - 但是C#只允许一个实现继承
使用合成,这涉及只使用您的属性编写一个类,并在所有类上具有该属性(参见示例1)
使用扩展方法 - 您可以在"标记"界面(没有实际方法)或对象本身上执行此操作(请参阅示例2)
例1
public class SessionContainer
{
public SessionObject SessionObject
{
get
{
return Session["SessionObject"] as SessionObject;
}
set
{
Session["SessionObject"] = value;
}
}
}
public class YourClass1
{
public SessionContainer Session { get; private set; }
public YourClass1
{
this.Session = new SessionContainer();
}
}
public class YourClass2
{
public SessionContainer Session { get; private set; }
public YourClass2
{
this.Session = new SessionContainer();
}
}
Run Code Online (Sandbox Code Playgroud)
示例2(使用空标记接口)
public interface ISessionContainer{}
public static class SessionExtensions
{
public static SessionObject GetSessionObject(this ISessionContainer session)
{
return session["SessionObject"] as SessionObject;
}
public static void SetSessionObject(this ISessionContainer session,
SessionObject obj)
{
session["SessionObject"] = obj;
}
}
public class YourClass1 : ISessionContainer{}
public class YourClass2 : ISessionContainer{}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |