C# new 修饰符解析
class ReadXMLConfig
{
//public abstract String operation(String rootpath, Setting gameconstants);
}
abstract class Setting
{
private static Setting setting;
abstract public void initSetting(ReadXMLConfig r);
public Setting(ReadXMLConfig r)
{
initSetting(r);
}
}
class SettingMTW2 : Setting
{
public SettingMTW2(ReadXMLConfig r) : base (r)
{
initSetting(r);
}
public override void initSetting(ReadXMLConfig r)
{
Console.WriteLine("fu");
//throw new NotImplementedException();
}
}
class SettingMTW2BC : SettingMTW2
{
public SettingMTW2BC(ReadXMLConfig r) : base(r)
{
initSetting(r);
}
public new void initSetting(ReadXMLConfig r)
{
Console.WriteLine("zi");
//throw new NotImplementedException();
}
}
class Program
{
static void Main(string[] args)//主函数
{
ReadXMLConfig r = new controller.ReadXMLConfig ();
Setting s = new SettingMTW2BC(r);
}
}
运行结果是
fu
fu
zi
为什么会这样子,
初始化动作进行多次只要最终是子类的就好。
看这篇文章我还以为打印出来就一个
fu
感谢。
有人详细说说new 的作用?
https://blog.csdn.net/jinsiku...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这其中有两个点:
所以调用
new SettingMTW2BC(r)
的时候,其实是依次调用了new Setting(r)
,new SettingMTW2(r)
和new SettingMTW2BC(r)
,所以会输出三个new SettingMTW2BC(r)
的时候,才调用的是SettingMTW2BC.initSetting
如果想只输出一个,就不需要在后续的构造函数中调用initSetting。
如果只想输出最后子类的,就一路override 就可以了。