“new” keyword in property declaration in c#

前端 未结 5 1416
忘掉有多难
忘掉有多难 2020-12-01 15:26

I\'ve been given a .net project to maintain. I was just browsing through the code and I noticed this on a property declaration:

public new string navUrl
{
           


        
相关标签:
5条回答
  • 2020-12-01 15:56

    This is also documented here.

    Code snippet from msdn.

    public class BaseClass
    {
        public void DoWork() { }
        public int WorkField;
        public int WorkProperty
        {
            get { return 0; }
        }
    }
    
    public class DerivedClass : BaseClass
    {
        public new void DoWork() { }
        public new int WorkField;
        public new int WorkProperty
        {
            get { return 0; }
        }
    }    
    
    DerivedClass B = new DerivedClass();
    B.WorkProperty;  // Calls the new property.
    
    BaseClass A = (BaseClass)B;
    A.WorkProperty;  // Calls the old property.
    
    0 讨论(0)
  • 2020-12-01 15:57

    new is hiding the property.

    It might be like this in your code:

    class base1
    {
        public virtual string navUrl
        {
            get;
            set;
        }
    }
    
    class derived : base1
    {
        public new string navUrl
        {
            get;
            set;
        }
    }
    

    Here in the derived class, the navUrl property is hiding the base class property.

    0 讨论(0)
  • 2020-12-01 16:08

    Some times referred to as Shadowing or method hiding; The method called depends on the type of the reference at the point the call is made. This might help.

    0 讨论(0)
  • 2020-12-01 16:16

    https://msdn.microsoft.com/en-us/library/435f1dw2.aspx

    Look at the first example here, it gives a pretty good idea of how the new keyword can be used to mask base class variables

    0 讨论(0)
  • 2020-12-01 16:21

    It hides the navUrl property of the base class. See new Modifier. As mentioned in that MSDN entry, you can access the "hidden" property with fully qualified names: BaseClass.navUrl. Abuse of either can result in massive confusion and possible insanity (i.e. broken code).

    0 讨论(0)
提交回复
热议问题