【问题标题】:Add fields to class like Inheritance, but keep same type像继承一样向类添加字段,但保持相同的类型
【发布时间】: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


【解决方案1】:

看看你可以用不同的方式extend ServiceStack Authentication

创建一个继承 AuthUserSession 的自定义类型是一种选择。您可以告诉 ServiceStack 在 AuthFeature 构造函数中使用您的自定义 UserSession:

Plugins.Add(new AuthFeature(() => new MyUserSession(), ...);

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2022-09-27
    相关资源
    最近更新 更多