Overriding the Defaults in a struct (c#)

前端 未结 12 938
感情败类
感情败类 2021-01-04 00:47

Is it possible to set or override the default state for a structure?

As an example I have an

enum something{a,b,c,d,e};

and a struc

12条回答
  •  清酒与你
    2021-01-04 01:34

    Somewhat related: I've often wanted to use the new object initializer syntax with an immutable value type. However, given the nature of a typical immutable value type implementation, there is no way to utilize that syntax, since the properties are read-only.

    I've come up with this approach; In my opinion this still satisfies the immutability of the value type, but allows the code that is responsible for instantiating the value type greater control over the initialization of the internal data.

    struct ImmutableValueType
    {
        private int _ID;
        private string _Name;
    
        public int ID
        {
            get { return _ID; }
        }
    
        public string Name
        {
            get { return _Name; }
        }
    
        // Infuser struct defined within the ImmutableValueType struct so that it has access to private fields
        public struct Infuser
        {
            private ImmutableValueType _Item;
    
            // write-only properties provide the complement to the read-only properties of the immutable value type
            public int ID
            {
                set { _Item._ID = value; }
            }
    
            public string Name
            {
                set { _Item._Name = value; }
            }
    
            public ImmutableValueType Produce()
            {
                return this._Item;
            }
    
            public void Reset(ImmutableValueType item)
            {
                this._Item = item;
            }
    
            public void Reset()
            {
                this._Item = new ImmutableValueType();
            }
    
            public static implicit operator ImmutableValueType(Infuser infuser)
            {
                return infuser.Produce();
            }
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            // use of object initializer syntax made possible by the Infuser type
            var item = new ImmutableValueType.Infuser
            {
                ID = 123,
                Name = "ABC",
            }.Produce();
    
            Console.WriteLine("ID={0}, Name={1}", item.ID, item.Name);
        }
    }
    

提交回复
热议问题