简体   繁体   中英

How to pass parameter to class C#?

I have code as below

public  class LocalDB
{
    public static int e_SessionID;

    public static string e_EventName;

    public static string e_TimeCreate;
}

in other class:

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

but it is can not pass value.

Problem : You are trying to access the static feilds using instance reference variable newEvent as below:

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

Solution : You need to use classname to access the static fields

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

Replace this:

 newEvent.e_SessionID = 123;

With this:

LocalDB.e_SessionID = 123;

Static methods and variables can only invoke using the class name and you are trying to call using the class object.

if you want to set the value of e_SessionID set the value using class name as follows

LocalDB.e_SessionID=123;

Why don't you set them up as properties? Have a read of this SO post why prefer properties to public variables

"Fields are considered implementation details of classes and exposing them publicly breaks encapsulation."

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

try to use property instead:

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

Prefer instance data to static data.

Static data is effectively global state. Do you have only one event in the lifetime of your program? What if you need to support multithreading? This is object-oriented programming; use objects.

Encapsulate data.

Avoid making fields public. Prefer properties, as others have stated. Note that this allows assigning the creation time at construction (and only then).

Use appropriate types.

If you are storing a date/time value, normally you would use the DateTime class.

Favor immutability.

If you know the values of properties at construction time, set them then and don't allow them to be changed.

Think about names.

Descriptive names matter, especially when you're doing maintenance after six months. I didn't change the name of LocalDB in my example, as I don't know your domain or use case. However, this class looks more like an event than a database to me. Would Event be a better name?

The following example uses C# 6 syntax; earlier versions would need to add private setters and move the initialization to the constructor.

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

A flaw in this example is that the NewEvent property of an Other instance will be null on creation. Avoid nulls where possible. Perhaps this should be a collection of events; not knowing your use case I can't say.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM