C# Custom getter/setter without private variable

前端 未结 3 756
伪装坚强ぢ
伪装坚强ぢ 2021-02-01 12:01

I learned c# recently, so when I learned to write properties, I was taught to do it like this:

public string Name { get; set; }

Auto properties

3条回答
  •  一个人的身影
    2021-02-01 12:38

    No, I'm afraid not. The compiler is smart enough to make this happen for you on auto-generated properties, but with standard properties I imagine the logic behind something like that would end up getting in the way and doing more harm than good.

    For example, what if I create a property like this...

    public int SomeValue
    {
      get
      {
        return 0;
      }
    }
    

    Would the compiler (with the feature you're looking for) create a backing private variable? Why? It doesn't need one.

    Additionally, if the private value isn't created until compilation time, what are you going to reference in your code:

    public string Name {
      get { return _Name; }
      set { _Name = value }
    }
    

    What is _Name? What if you have another value somewhere else called _Name? Then what would the compiler call the backing value for this property? What if I need two backing values? Would the compiler be smart enough for that?

    public string Name
    {
      get
      {
        return string.Format("{0} {1}", _FirstName, _LastName);
      }
      set
      {
        // some parsing magic
      }
    }
    

    It's been asked before, but I imagine the answer is going to continue to be "no" for the foreseeable future.

    An auto-property is syntactic shorthand for simple direct member access. (And I imagine one of its driving forces was simply to try to get people to stop creating public values directly.) Properties can grow in complexity well beyond that very easily and I personally wouldn't want the compiler trying to figure out what I can easily just tell it to do.

提交回复
热议问题