"new" keyword in property declaration in c#

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
{
  get 
  {
    return ...;
  }
  set
  {
    ...
  }
}

I was wondering what does the new modifier do to the property?

Answers


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).


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.


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.

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.


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


Need Your Help

React PropTypes vs. Flow

reactjs flowtype react-proptypes

PropTypes and Flow cover similar things but are using different approaches. PropTypes can give you warnings during runtime, which can be helpful to quickly find malformed responses coming from a se...

Unique ways to use the Null Coalescing operator

c# coding-style null conditional-operator null-coalescing-operator

I know the standard way of using the Null coalescing operator in C# is to set default values.