C# &引用;新";c中属性声明中的关键字#
我有一个.NET项目要维护。我只是浏览了一下代码,在一个属性声明中注意到:C# &引用;新";c中属性声明中的关键字#,c#,.net,asp.net,C#,.net,Asp.net,我有一个.NET项目要维护。我只是浏览了一下代码,在一个属性声明中注意到: public new string navUrl { get { return ...; } set { ... } } 我想知道new修饰符对属性做了什么?它隐藏了基类的navUrl属性。看见如该MSDN条目中所述,您可以使用完全限定的名称访问“隐藏”属性:BaseClass.navUrl。滥用任何一种都可能导致巨大的混乱和可能的精神错乱(即代码损坏)。new正在隐藏该属性
public new string navUrl
{
get
{
return ...;
}
set
{
...
}
}
我想知道
new
修饰符对属性做了什么?它隐藏了基类的navUrl属性。看见如该MSDN条目中所述,您可以使用完全限定的名称访问“隐藏”属性:BaseClass.navUrl
。滥用任何一种都可能导致巨大的混乱和可能的精神错乱(即代码损坏)。new
正在隐藏该属性
在您的代码中可能是这样的:
class base1
{
public virtual string navUrl
{
get;
set;
}
}
class derived : base1
{
public new string navUrl
{
get;
set;
}
}
这里在派生类中,
navUrl
属性隐藏基类属性。有时称为阴影
或;调用的方法取决于调用点处引用的类型。帮助。这也有文档记录
来自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.
看看这里的第一个例子,它很好地说明了如何使用
new
关键字来屏蔽基类变量您的代码片段很好地阐明了隐藏概念,但是new
修饰符不会导致这种行为,它只告诉编译器你是故意这样做的,所以不会显示警告消息。那么是什么导致了这种行为呢?通常.WorkProperty会调用派生类的属性,因为A引用派生对象,而不管引用类型如何。new
修饰符不会导致此行为,它只会告诉编译器你是故意这么做的,所以不会显示警告消息。如果我使用相同名称但不同类型的关键字new
,会有问题吗?