【问题标题】:How to pass parameter to class C#?如何将参数传递给C#类?
【发布时间】:2014-03-17 08:58:22
【问题描述】:

我的代码如下

public  class LocalDB
{
    public static int e_SessionID;

    public static string e_EventName;

    public static string e_TimeCreate;
}

在其他类中:

public static LocalDB newEvent ;
public void something()
    {
      newEvent.e_SessionID=123;
    }

但它是不能传值的。

【问题讨论】:

    标签: c# .net static


    【解决方案1】:

    问题:您正在尝试使用实例引用变量newEvent 访问静态字段,如下所示:

    newEvent.e_SessionID=123;
    //^^^Here
    

    解决方案:您需要使用classname 访问static 字段

    newEvent.e_SessionID=123;
    //^^^Replace with classname LocalDB here
    

    替换这个:

     newEvent.e_SessionID = 123;
    

    有了这个:

    LocalDB.e_SessionID = 123;
    

    【讨论】:

      【解决方案2】:

      为什么不将它们设置为属性?阅读这篇 SO 帖子 why prefer properties to public variables

      “字段被认为是类的实现细节,公开它们会破坏封装。”

      public class LocalDB
      {
          public int SessionID { get; set; }
      }
      

      【讨论】:

        【解决方案3】:

        静态方法和变量只能使用类名调用 并且您正在尝试使用类对象进行调用。

        如果要设置e_SessionID 的值,请使用类名设置值,如下所示

        LocalDB.e_SessionID=123;
        

        【讨论】:

          【解决方案4】:

          尝试改用属性:

          public  class LocalDB
          {
             public int e_SessionID { get; set; }
             public string e_EventName { get; set; }
             public string e_TimeCreate { get; set; }
          }
          

          【讨论】:

            【解决方案5】:

            更喜欢实例数据而不是静态数据。

            静态数据实际上是全局状态。在您的程序的生命周期中,您是否只有一个事件?如果需要支持多线程怎么办?这是面向对象的编程;使用对象。

            封装数据。

            避免公开字段。正如其他人所说,更喜欢属性。请注意,这允许在构造时(并且仅在那时)分配创建时间。

            使用适当的类型。

            如果您要存储日期/时间值,通常您会使用 DateTime 类。

            支持不变性。

            如果你在构建时就知道属性的值,那么就设置它们,不要让它们被改变。

            想想名字。

            描述性名称很重要,尤其是当您在六个月后进行维护时。在我的示例中,我没有更改 LocalDB 的名称,因为我不知道您的域或用例。然而,这个类在我看来更像是一个事件而不是数据库。 Event 会是一个更好的名字吗?

            以下示例使用 C# 6 语法;早期版本需要添加私有设置器并将初始化移动到构造函数。

            public class LocalDB
            {
                public LocalDB(int sessionID, string eventName)
                {
                    SessionID = sessionID;
                    EventName = eventName;
                }
            
                public int SessionID { get; }
                public string EventName { get; }
                public DateTime TimeCreate { get; } = DateTime.UtcNow;
            }
            
            public class Other
            {
                public void DoSomething()
                {
                    NewEvent = new LocalDB(1, "Other Event");
                }
            
                public LocalDB NewEvent { get; private set; }
            }
            

            此示例中的一个缺陷是Other 实例的NewEvent 属性在创建时将是null。尽可能避免使用空值。也许这应该是事件的集合;不知道你的用例我不能说。

            【讨论】:

              猜你喜欢
              • 2013-07-27
              • 2013-11-30
              • 1970-01-01
              • 2012-02-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-11-09
              • 2015-10-11
              相关资源
              最近更新 更多