[英]override ToString() with override and new keyword
我是c#.confuse中的新手。
我用覆盖覆盖了ToString(),新的keyword.both给了我相同的输出。然后两者之间有什么区别。
这是我的例子
class A
{
public new string ToString()
{
return "With New Keyword";
}
}
class B
{
public override string ToString()
{
return "With Override Keyword";
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.Read();
}
}
使用新关键字
使用覆盖关键字
我知道这是一个愚蠢的问题。 请任何人帮我两个方法给我区别。
我不是在询问new和override关键字之间的区别。我想知道两种方法之间的区别。在Override Object方法的概念中。
当你这样做时,它会有所不同:
object a = new A(); // notice the type of the variable here!
object b = new B();
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
a.ToString()
不会调用ToString
的实现,而是调用object.ToString
,它返回对象的完全限定类型名称。 b.ToString()
将调用您的实现。
你在B
所做的被称为覆盖。 你在A
所做A
就是隐藏 。 当变量的编译时类型不再是该类型时,隐藏会失去效果。 只有在编译时类型为A
时才会调用ToString
实现。
在这里了解更多。
你可以轻松谷歌这个。
来自MSDN
在C#中,派生类中的方法可以与基类中的方法具有相同的名称。 您可以使用new和override关键字指定方法的交互方式。 override修饰符扩展基类方法,new修饰符隐藏它。 本主题中的示例说明了这种差异。
在控制台应用程序中,声明以下两个类,BaseClass和DerivedClass。 DerivedClass继承自BaseClass。
在B
类中,您将覆盖ToString()
方法,即Object.ToString()
因为您没有继承A
现在考虑下面的例子,
class A
{
public string ReturnString()
{
return "ClassA::Method";
}
}
class B : A
{
public newstring ReturnString()
{
return "ClassB::Method";
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.Read();
}
}
在这里,您将继承Class A
class B
的方法隐藏在class B
Class A
。 因此,您将获得两个方法调用的ClassA::Method
输出。
现在考虑下面的例子
class A
{
public virtual string ReturnString()
{
return "ClassA::Method";
}
}
class B : A
{
public override string ReturnString()
{
return "ClassB::Method";
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.Read();
}
}
在这里,我们重写了Class B
Class A's
Class B
方法。 这意味着ClassB method
就像扩展一样,或者你可以说它与ClassA
有不同的含义。 您将获得如下输出
ClassA::Method
ClassB::Method
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.