添加方法 - 另一个 NS 中的对象
Add Method - Object in another NS
也许我看错了,但我已经这样做了一个多小时了。
- 我首先尝试了一种扩展方法,但效果不佳。
- 尝试扩展
FormsAuthentication
class 以包含一个 static
方法到 return 一个串联值,该值是散布在各个根点上的相同模式。
当前代码(选项 #2):
public partial class FormsAuthentication {
public static string FormsUserCookieName () {
return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
}
}
我唯一没有做的事情是为要定位的 FormsAuthentication
“扩展”创建一个命名空间文件。
坦率地说,不确定将编译器“心理化”到常驻命名空间中是否会有任何不同的表现。
如有任何关于最佳方法的建议,我们将不胜感激。
更新
根据讨论和审查,最好的方法似乎是为每个页面继承的页面 class 实施 属性。
public class WebsitePage : Page {
....
public string FormsUserCookieName { get { return FormsAuthentication.FormsCookieName + '_' + User.Identity.Name; } }
....
}
我想你想创建一个 extension-method。
实际上,它们并没有真正扩展 class FormsAuthentication
,因为它们驻留在自己的 class 中,并且完全独立于扩展的 class。看看这个例子:
public static class MyExtensions
{
public static string FormsUserCookieName (this FormsAuthentication) {
return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
}
}
如果您包含定义 MyExtensions
的名称空间,现在可以像 是 定义在 FormsAuthentication
中一样使用。因此你现在可以这样写:
myInstanceOfFormsAuthentication.FormsUserCookieName();
但是该方法并不真正属于 class,它在 MyExtensions
-class 中定义,因此等同于以下内容:
MyExtensions.FormsUserCookieName(myInstanceOfFormsAuthentication);
另一种方法是简单地在 FormsAuthentication
:
周围进行包装-class
class FormsAuthenticationEx
{
public static string FormsUserCookieName() { ... }
}
这对您的 API 用户来说更清楚,因为它显示了您的扩展程序的定义位置。
扩展 class 将不起作用。 class 的所有部分都必须标记为部分,并且必须在同一程序集中定义。您永远不会实现后者,因为 class 定义为:
public sealed class FormsAuthentication
它不是部分的,并且像大多数 .NET Framework 一样class它是密封的。
您唯一的选择是创建扩展方法。
也许我看错了,但我已经这样做了一个多小时了。
- 我首先尝试了一种扩展方法,但效果不佳。
- 尝试扩展
FormsAuthentication
class 以包含一个static
方法到 return 一个串联值,该值是散布在各个根点上的相同模式。
当前代码(选项 #2):
public partial class FormsAuthentication {
public static string FormsUserCookieName () {
return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
}
}
我唯一没有做的事情是为要定位的 FormsAuthentication
“扩展”创建一个命名空间文件。
坦率地说,不确定将编译器“心理化”到常驻命名空间中是否会有任何不同的表现。
如有任何关于最佳方法的建议,我们将不胜感激。
更新
根据讨论和审查,最好的方法似乎是为每个页面继承的页面 class 实施 属性。
public class WebsitePage : Page {
....
public string FormsUserCookieName { get { return FormsAuthentication.FormsCookieName + '_' + User.Identity.Name; } }
....
}
我想你想创建一个 extension-method。
实际上,它们并没有真正扩展 class FormsAuthentication
,因为它们驻留在自己的 class 中,并且完全独立于扩展的 class。看看这个例子:
public static class MyExtensions
{
public static string FormsUserCookieName (this FormsAuthentication) {
return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
}
}
如果您包含定义 MyExtensions
的名称空间,现在可以像 是 定义在 FormsAuthentication
中一样使用。因此你现在可以这样写:
myInstanceOfFormsAuthentication.FormsUserCookieName();
但是该方法并不真正属于 class,它在 MyExtensions
-class 中定义,因此等同于以下内容:
MyExtensions.FormsUserCookieName(myInstanceOfFormsAuthentication);
另一种方法是简单地在 FormsAuthentication
:
class FormsAuthenticationEx
{
public static string FormsUserCookieName() { ... }
}
这对您的 API 用户来说更清楚,因为它显示了您的扩展程序的定义位置。
扩展 class 将不起作用。 class 的所有部分都必须标记为部分,并且必须在同一程序集中定义。您永远不会实现后者,因为 class 定义为:
public sealed class FormsAuthentication
它不是部分的,并且像大多数 .NET Framework 一样class它是密封的。
您唯一的选择是创建扩展方法。