c# - C# 中相同函数的静态和非静态版本

标签 c# asp.net static readability maintainability

我将自己的 GetUserId() 函数实现为静态,以便能够在静态上下文中检索 ID。但我也有很多地方使用内置在 asp.net UserManager 库中的标准 GetUserId() 函数。我对不对同一事物使用不同逻辑的修复是覆盖非静态方法并在其中使用静态方法(这是在 UserManagerService 类中):

public override string GetUserId(ClaimsPrincipal user)
{
    return GetUserIdStatic(user);
}

public static string GetUserIdStatic(ClaimsPrincipal user)
{
    return user.FindFirst(ClaimTypes.NameIdentifier).Value;
}

我这样做是因为我更喜欢在非静态上下文中调用非静态方法(通常超过 90% 的调用)。因此,我更愿意尽可能地调用 _userManagerService.GetUserId(User) 而不是 UserManagerService.GetUserIdStatic(User)

从可读性和可维护性的角度来看(以及我现在无法预见的最终有害后果),按照上述方式进行操作是否更好?将所有调用切换到静态版本;还是我没有想到的其他方式?

最佳答案

制作静态和非静态版本的方法来做同样的事情是非常值得怀疑的。

您应该将获取用户 ID 的静态方法替换为静态方法或静态属性以获取用户管理器服务。这将使您可以通过调用非静态方法在静态上下文中获取用户 ID:

var userId = StaticGetUserManagerSerice().GetUserIdStatic(user);

var userId = UserManagerSerice.Instance.GetUserIdStatic(user);

关于c# - C# 中相同函数的静态和非静态版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370601/

相关文章:

c# - 获取文件扩展名(编辑)

c# - 停止在 View 加载时调用单选按钮 setter

c# - Gridview 分页不起作用

iphone - 如何将lame编译为iPhone的armv6和armv7的静态库(.a)?

java - 静态工厂方法优点

c# - 如何在不留间隙的情况下为线渲染器形状设置动画

c# - 通过 xmlns 引用访问另一个项目

c# - GridView:隐藏标题上的排序箭头

c# - 如何修复传入字典的模型项类型错误?

c++ - 你怎么知道 main 是否已经退出?