【发布时间】:2015-11-19 20:20:12
【问题描述】:
我正在使用 ServiceStack(4.0.46.0) 并希望将字段添加到 ServiceStack.AuthUserSession。使用继承创建新类是一种解决方案,但我希望新类的类型仍为 ServiceStack.AuthUserSession
例如
Public Class MyUserSession : ServiceStack.AuthUserSession
{
Public string NewFieldOne {get; set;}
Public string NewFieldTwo {get; set;}
}
....但是 MyUserSession 仍然是ServiceStack.AuthUserSession. 类型,这可能吗?这是在框架 4.5 上。
【问题讨论】:
-
如果您询问是否可以将字段添加到基本类型并使其出现在基本类型中,答案是否定的。但是,如果它确实是派生类型的实例,则可以强制转换为派生类型并使用字段...
-
不将此标记为欺骗,但您可以使用
ConditionalWeakTable做类似的事情。虽然语法会有所不同,但您必须使用一些扩展方法。 -
"MyUserSession 的类型仍然是
ServiceStack.AuthUserSession" -- 如果类B继承类A,它是一个类A以及作为一个类B。这是 OOP 的基本原理,也是继承的全部意义所在。您的MyUserSession类型仍然可以在需要ServiceStack.AuthUserSession类型的任何地方使用,因为它也是其中之一。从字面上看,您的问题是自我回答的;因此,如果这不是您要问的,请编辑您的问题,以便清楚您确实要问什么。 -
我理解@PeterDuniho,我认为如果 B 类继承自 A 类,那么 B 类仍然被认为是不同的类。如果您将此作为答案,我会为您标记为正确的。
-
你也许可以使用扩展方法来伪造它,但它们必须被视为方法,而不是属性。
标签: c# inheritance visual-studio-2013