我的代码如下
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;
}
但它无法传递价值。
答案 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
。尽可能避免使用空值。也许这应该是一系列事件;不知道你的用例我不能说。