static property in c# 6

前端 未结 3 1286
栀梦
栀梦 2021-01-01 15:19

I\'m writing a small code to more understand about property and static property. Like these:

class UserIdentity
{
    public static         


        
相关标签:
3条回答
  • Static readonly property must be assigned in static constructor like this:

    public static class UserIdentity
    {
        public static IDictionary<string, DateTime> OnlineUsers { get; }
    
        static UserIdentity()
        {
            OnlineUsers = new Dictionary<string, DateTime>();
        }
    }
    
    0 讨论(0)
  • 2021-01-01 15:57

    You're trying to assign to a read only static property in an instance constructor. That would cause it to be assigned every time a new instance is created, which would mean it's not read only. You need to assign to it in the static constructor:

    public static IDictionary<string, DateTime> OnlineUsers { get; }
    
    static UserIdentity()
    {
        OnlineUsers = new Dictionary<string, DateTime>();
    }
    

    Or you can just do it inline:

    public static IDictionary<string, DateTime> OnlineUsers { get; } = new Dictionary<string, DateTime>();
    
    0 讨论(0)
  • 2021-01-01 16:10

    First of all, your constructors are missing the parenthesis (). A correct constructor looks like this:

    public class UserIdentity {
    
         public UserIdentity() {
            ...
         }
    }
    

    For your question: Readonly properties can only be assigned in the constructor of the specific context. A static property is not bound to a specific instance but to the class.

    In your second code snippet OnlineUsers is non static, thus it can be assigned to in the constructor of a new instance, and only there.

    In your third snippet, OnlineUsers is static. Thus, it can only be assigned to in a static initializer.

    class UserIdentity
    {
        public static IDictionary<string, DateTime> OnlineUsers { get; }
    
        //This is a static initializer, which is called when the first reference to this class is made and can be used to initialize the statics of the class
        static UserIdentity()
        {
            OnlineUsers = new Dictionary<string, DateTime>();
        }
    }
    
    0 讨论(0)
提交回复
热议问题