"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?


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.