如何将参数传递给C#类?

时间:2014-03-17 08:58:23

标签: c# .net static

我的代码如下

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;
    }

但它无法传递价值。

5 个答案:

答案 0 :(得分:7)

问题:您正尝试使用实例引用变量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;

答案 1 :(得分:1)

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

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

LocalDB.e_SessionID=123;

答案 2 :(得分:1)

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

“字段被视为类的实现细节,并公开它们封装。”

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

答案 3 :(得分:0)

尝试使用属性:

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

答案 4 :(得分:0)

首选实例数据到静态数据。

静态数据实际上是全局状态。您的计划有效期内只有一个活动吗?如果您需要支持多线程怎么办?这是面向对象的编程;使用对象。

封装数据。

避免公开领域。像其他人所说的那样,选择房产。请注意,这允许在构造时分配创建时间(仅在此时)。

使用合适的类型。

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

支持不变性。

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

想想名字。

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

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

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; }
}

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