C# ASP.net中的独立函数

C# ASP.net中的独立函数,c#,asp.net,class,class-design,C#,Asp.net,Class,Class Design,在asp.net中从未见过这样的操作,但至少,我可以定义函数而不成为类的一部分吗 我想要的是一个实用程序库。目前我有一个Utils类,每次我需要使用它来填充下拉列表时,我都必须创建并初始化Utils()对象……除了声明类static(我不希望在其中访问会话时声明该类static)之外,还有什么方法可以解决这个问题 我用的是c#,不是VB 谢谢您可以随时使用扩展方法 然后可以将方法添加到现有对象上 您还可以创建一个基类,您的所有页面都从该基类继承并具有包含所需方法的基类。它仍然是类的一部分,但您

在asp.net中从未见过这样的操作,但至少,我可以定义函数而不成为类的一部分吗

我想要的是一个实用程序库。目前我有一个Utils类,每次我需要使用它来填充下拉列表时,我都必须创建并初始化Utils()对象……除了声明类static(我不希望在其中访问会话时声明该类static)之外,还有什么方法可以解决这个问题

我用的是c#,不是VB


谢谢

您可以随时使用扩展方法

然后可以将方法添加到现有对象上


您还可以创建一个基类,您的所有页面都从该基类继承并具有包含所需方法的基类。它仍然是类的一部分,但您不需要实例化新的类,也不需要使用静态方法。

在类之外没有方法

在您的案例中,典型的解决方案是创建一个充满静态方法的实用程序类……这样您就不必担心创建类的实例来利用它的方法


就像Joel提到的那样……您仍然可以从静态方法访问会话。

如果类有状态,那么就不要管它。或者,将您的状态作为参数,然后将其设置为静态。

您可以让您的所有页面从一个BasePage类派生,并将您的所有util方法(或它们的包装器)放入BasePage类中。

您可以使用HttpContext.Current.Session[]访问会话变量,并且可以从任何类执行此操作(事实上,在许多使用会话变量的应用程序中,我将所有会话变量封装在它们自己的类中)


话虽如此,在类之外没有方法,也没有[好的]理由这样做。

您仍然可以在静态类中访问会话变量。一种方法可能是这样的:

public static class Utils
{
    private static HttpSessionState Session
    {
        get { return HttpContext.Current.Session; }
    }

    public static string DoThing(string input)
    {
        // here you can access session variables like you're used to:
        Session["foo"] = input;
    }
}

+1.不需要实例化utils类,只需使用statics。VB可以有模块。这些模块通过私有构造函数编译成默认类,并且方法成为共享的。虽然MSIL仍然是一个类,但代码看起来像是一个没有包含类的方法……甚至连扩展方法都属于一个类。哦,绝对。你无法绕过它正在创建类,但我试图为他遇到的问题提供一种替代方法。不传递引用就不能访问HttpContext.Current.Session anywhere吗?看起来很麻烦,您可以访问HttpContext.Current.Sessionanywhere。我只是将静态属性作为一个示例,说明如何避免更改现有代码或wr多次抛出“HttpContext.Current.Session”——这对我来说似乎很混乱。我实际上完全忘记了我已经将所有会话访问封装在一个名为httphelper的类中,该类是静态的。我做了一段时间后完全忘记了。所以现在每次我需要访问会话时,我所要做的就是httphelper.Session(关键)。所以我想我的问题已经解决了。谢谢!看看Kevin的答案。如果你能在Page类上定义和使用扩展方法(或者在2.0中始终使用你自己的基类而不是Page)这将为您提供所需的代码语法。不过,控件或web服务需要一些额外的工作。我实际上创建了两个类似于静态类的Util:仅用于本地项目的Util和SharedUtil(或类似的)对于共享公共库-这避免了歧义错误。我还将共享库放在单独的源存储库中,以更好地处理版本控制。顺便说一句,本地Util通常标记为
内部
,共享dutil是
公共
。我也这样做,但这意味着您必须有一些代码重复。例如,PageBaseat继承自System.Web.UI.Page和继承自System.Web.UI.UserControl的ControlBase。其他所有内容都在Utils静态类中。