【问题标题】:how to use namespaces in asp.net application?如何在 asp.net 应用程序中使用命名空间?
【发布时间】:2013-04-04 16:46:01
【问题描述】:

如何在同一个或不同的命名空间但在同一个应用程序中使用“公共变量”?

例如:

BookStore Web 应用程序中的第一个命名空间

namespace BookStore
{
    public partial class index : System.Web.UI.Page
    {
        public string command; // the public variable declared

第二个命名空间,在同一 BookStore 应用程序中

namespace Admin.BookStore // here i try to include the BookStore namespace..
{
    public partial class admin : System.Web.UI.Page
    {
        void access()
        {
            command = "something text" ;

这里我认为应该在智能感知中看到command。我想是因为它是一个公共变量,但它没有显示出来。

【问题讨论】:

  • 你需要一个类的实例才能访问它的字段/成员
  • 完全清楚 - 这与命名空间无关,它与基本的面向对象编程有关。您需要类(或静态成员)的实例来设置成员的值。 .NET 中没有全局变量之类的东西。
  • 完全正确,从表面上看,他只是按照我的示例将信息从一个页面传递到另一个页面。
  • 我认为您建议做的不是在 asp.net 中编写 Web 表单的好方法。如果您允许,我建议您使用会话来存储变量。

标签: c# asp.net namespaces access-specifier


【解决方案1】:

在管理类中,您还可以在文件顶部添加以下内容:

Using BookStore;

但是,index 不是静态类,因此您必须拥有该类的实例才能使用命令字段;

Index indexInstance = new Index();
indexInstance.command = "something text";

【讨论】:

  • 不过,这不是真正的问题,因为设置这样的变量并不会起到太大作用。它们是页面类。它们不打算在本地实例化。我会质疑 OP 想要做什么。
  • 但是,您的基本前提是正确的。您需要一个类的实例(或静态成员)才能设置该值。 =)
  • 是的,我对 asp.net 没有那么丰富的经验。我读了这个问题,并认为这只是一个 c# 命名空间问题 :) 下次我会更仔细地阅读
  • 实际上我已经按照您的建议进行了尝试。但这也没有帮助!!!
  • @user2114182 不要只说“没有帮助”。而是告诉我们它如何或为什么不起作用,也许可以编辑您的问题。如果您真的想得到帮助,请给我们一些帮助。
【解决方案2】:

有很多方法可以做到这一点,但令人担忧的是,您正试图跨页面设置相同的变量 - 如果没有 Session/static,这将无法正常工作。

我的方式(对于初学者)是开始使用类继承。

试试这个:

namespace BookStore
{
    public partial class index : BasePage
    {

    }
}

namespace Admin.BookStore
{
    public partial class index : BasePage
    {
        void access()
        {
            base.command = "something text"; // This accesses the BasePage variable
        }
    }
}

namespace BookStore
{
     public class BasePage : System.Web.UI.Page
     {
          // public static string command { get; set; } // Bad practice IMO
          public string command 
          {
               get {
                   if(Session["command"] != null) return Session["command"].ToString();
                   return String.Empty;
               }
               set {
                   Session["command"] = value;
               }
          }  
     }
}

【讨论】:

    【解决方案3】:

    在包含admin 类的文件中,滚动到页面顶部并插入该行

    using BookStore;
    

    请注意,这通常位于您要添加到的文件中的命名空间声明之上。这使您的类/页面对将要使用它的类可见。

    要遵循您提供的示例,您现在需要一个类的实例才能访问公共字段:

    var myIndexObject = new index();
    myIndexObject.command = "my value";
    

    【讨论】:

    • 我对 100% 正确答案的否决票感到困惑,但我想这就是某些人滚动的方式......
    • 我否决了答案,现在将其删除。我这样做是因为我在您发布之前 4 分钟发布了与 anwer 相同的代码。在 Meta 我读到这不是正确的做法,所以我再次删除了反对票
    • @wterbeek 不用担心,至少你回来并扭转了它:) 无论如何不要投票不正确或错误的答案,但尽量不要仅仅因为答案与你的相似而投票 - 这可以只是提示报复和混乱。
    【解决方案4】:

    要访问不同命名空间中的类,您需要从应用程序根命名空间中指定或“使用”完整的命名空间。

    例如:如果您的应用根命名空间是AppNameSpace

    AppNameSpace.BookStore.index.command = "..."
    

    using AppNameSpace.BookStore
    '
    '
    '
    index.command = "..."
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多