C# new 修饰符解析

发布于 2022-09-13 00:12:23 字数 1602 浏览 16 评论 0

   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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲娇萝莉攻 2022-09-20 00:12:23

这其中有两个点:

  1. 实例构造的时候会依次调用父类的构造函数
    所以调用 new SettingMTW2BC(r)的时候,其实是依次调用了new Setting(r),new SettingMTW2(r)new SettingMTW2BC(r),所以会输出三个
  2. 使用 Override 和 New 关键字进行版本控制,new 修饰符用于隐藏基类的方法,只有在最后调用到new SettingMTW2BC(r)的时候,才调用的是SettingMTW2BC.initSetting

如果想只输出一个,就不需要在后续的构造函数中调用initSetting。
如果只想输出最后子类的,就一路override 就可以了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文