添加方法 - 另一个NS中的对象

时间:2017-10-30 15:48:35

标签: c# .net forms-authentication .net-4.6

也许我看错了,但我已经这样做了一个多小时。

  1. 我首先尝试了一种扩展方法,但效果不佳。
  2. 尝试扩展FormsAuthentication类以包含static方法,以返回一个连接的值,该值与遍布各个根点的模式相同。
  3. 当前代码(选项#2):

    public partial class FormsAuthentication {
        public static string FormsUserCookieName () {
            return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
        }
    }
    

    我唯一没做过的事情就是为FormsAuthentication“扩展名”创建一个名称空间文件。

    坦率地说,不确定编译器在常驻命名空间中的“精神”是否会以不同的方式执行。

    对于最佳方法的任何建议将不胜感激。

    更新

    基于讨论和审核,似乎最好的方法是为每个页面继承的Page类实现一个属性。

    public class WebsitePage : Page {
        ....
        public string FormsUserCookieName { get { return FormsAuthentication.FormsCookieName + '_' + User.Identity.Name; } }
        ....
    }
    

2 个答案:

答案 0 :(得分:1)

我想你想创建一个extension-method

实际上那些并没有真正扩展类FormsAuthentication,因为它们位于自己的类中,并且完全独立于扩展类。看看这个例子:

public static class MyExtensions
{
    public static string FormsUserCookieName (this FormsAuthentication) {
        return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
    }
}

如果在FormsAuthentication内定义了 ,那么现在可以使用它,如果你在MyExtensions中定义了myInstanceOfFormsAuthentication.FormsUserCookieName(); 。因此,你现在可以写这个:

MyExtensions

然而,该方法并不真正属于该类,它在MyExtensions.FormsUserCookieName(myInstanceOfFormsAuthentication); - 类中定义,因此等效于以下内容:

FormsAuthentication

另一种方法就是在class FormsAuthenticationEx { public static string FormsUserCookieName() { ... } } 附近设置一个包装类:

{{1}}

对于API的用户来说,这更加清晰,因为它显示了扩展程序的定义位置。

答案 1 :(得分:1)

扩展课程不起作用。类的所有部分必须标记为部分,并且必须在同一个程序集中定义。你永远不会实现后者,因为这个类被定义为:

public sealed class FormsAuthentication

它不是部分的,与大多数.NET Framework类一样,它是密封的。

您唯一的选择是创建扩展方法。