前言

new 在重构这本书中写道new就是坏代码的味道,说明使用new的情况并不多。

在这里我指的new 是方法修饰符,而不是指实例。

正文

看下new的作用:

new 修饰符可以重新定义从基类继承下来的非虚成员。

也就是说你考虑的是是不是需要重新定义,如果不需要那么就不应该使用new。

使用一个new 产生的一个问题:

MakeObject:

public class MakeObject: MyOtherClass
{
}

MyOtherClass:

public class MyOtherClass:MyClass
{
public new void MagicMethod()
{
Console.WriteLine(nameof(MyOtherClass));
}
}

MyClass:

public class MyClass
{
public void MagicMethod()
{
Console.WriteLine(nameof(MyClass));
}
}

那么看一下:

static void Main(string[] args)
{
MakeObject make = new MakeObject();
MyClass c1=make as MyClass;
c1.MagicMethod();
MyOtherClass c2=make as MyOtherClass;
c2.MagicMethod();
Console.ReadKey();
}

运行结果为:

MyClass
MyOtherClass

其实我们也能猜到结果就是这个,那么有什么问题呢?

我们使用同一个对象C上面调用同一个方法居然结果不一致,这取决于类型转换为MyClass 或者MyOtherClass 。

这样一看好像没什么问题,但是却不是。

因为如果你想让其子类重写,你可以设置为virtual,也就是虚方法。

这个new 其实就是让我们来兼容一些东西的。

比如说MyClass 原本没有MagicMethod 方法,但是后来加了这个MagicMethod 。

然后这时候myclass 的地方又非常多的地方使用,这时候就会报错,当然现在会自动加上new了。

这只是给我们一个缓存区,最好的方式还是去修改子类的方法名,因为最后可能我们还是要调用到MyClass 的MagicMethod 方法,这时候新的问题又产生了。

c# 优化代码的一些规则——什么情况下应该使用new[七]的更多相关文章

  1. c# 优化代码的一些规则——优先隐式类型[一]

    前言 说到底就是优先使用var,这个关键字,在c# 3.0中出现了. 首先要确认几点,一个就是var 是静态变量,而不是动态变量,也就是说使用var 你是不必去担心性能问题得, 百度百科: 1)静态存 ...

  2. c# 优化代码的一些规则——使用is或as和强制类型转换的区别[三]

    前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student stude ...

  3. MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

    本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...

  4. c# 优化代码的一些规则——const 和 readonly[二]

    前言 在c# 的世界中,在初学的时候,可能很难区分readonly 和 const,两者都是不可修改. 看到这两个单词,我们想的是,最多他们的区别也不会太大.然后事实却出乎我们的意料. 正文 这两个声 ...

  5. c# 优化代码的一些规则——字符串使用优化[四]

    前言 在我们的程序中,经常使用到字符串,字符串的写法非常多,但是有一个问题就是我们写的字符串是否合适呢? 正文 内插符 介绍一个东西叫做内插字符,如下: static void Main(string ...

  6. 客官,.NETCore无代码侵入的模型验证了解下

    背景 .NETCore下的模型验证相信绝大部分的.NET开发者或多或少的都用过,微软官方提供的模型验证相关的类位于System.ComponentModel.DataAnnotations命令空间下, ...

  7. 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法

    在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法   ==========方法1: --------1. 选相应 ...

  8. PL/SQL 美化器&规则解释&优化代码

    前言 PLSQL有非常强大的自定义设置功能,比如美化文件规则, 使用者可以自行定义编辑规则,以便更好的优化SQL语句,增加可读性. 例如以下的部分代码,又长,分段不好,空格太多,结构散乱,还没有注释. ...

  9. 前端页面卡顿?或是DOM操作惹的祸,需优化代码

    文档对象模型(DOM)是一个独立 于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得 DOM成为了JavaSc ...

  10. Web前端开发最佳实践(13):前端页面卡顿?可能是DOM操作惹的祸,你需要优化代码

    文档对象模型(DOM)是一个独立于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得DOM成为了JavaScri ...

随机推荐

  1. Java instanceof 全小写 关键字使用

    1 package com.bytezreo.duotai2; 2 3 import java.sql.Date; 4 5 /** 6 * 7 * @Description 面向对象的特征三 ---- ...

  2. Server-side template injection 模板注入问题总结

    概念: 服务器模板注入(Server-side template injection) 攻击者能够使用本地的模板语法去注入一个恶意的payload,然后在服务器端执行该攻击,当与欧股直接输入数据到模板 ...

  3. 摆脱鼠标系列 - 百度搜索 - 火柴 - 快捷键 Ctrl两次

    摆脱鼠标系列 - 百度搜索 - 火柴 - 快捷键 Ctrl两次 有两款软件 utools 和 火柴,试用后觉得火柴符合试用功能 这里只用网络搜索 其他功能均不用 搜索用双核浏览器 因为用的老的chro ...

  4. pollute 污染 pol=por=pro 向前 lut=释放 结合ps软件里面lut概念记忆

    pollute 污染 pol = por = pro = 向前 lut = 释放 (ps里面有lut的概念) e 动词 向前释放 -> 污染 弄脏 简单记忆 poll / ute poll - ...

  5. 制作B站直播简介

    本文只用于个人总结备份,如果对你有帮助就更好了. 准备工作 准备好简介要用的的背景图.头像图,上传到图床生成图片链接. 简介的内容可分为主播简介.直播时间.直播内容.联系方式,内容根据实际需要修改,需 ...

  6. github 上不去

    win:C:\WINDOWS\system32\drivers\etc linux:/etc/hosts 在这个网址查询每个网址对应的ip:https://www.ipaddress.com/ 202 ...

  7. 【ATCOER、D - ±1 Operation 2】前缀和+排序二分

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public cla ...

  8. JAVA 相关

    1.  google guava  cache 2. presto 3. loadingcache 4. aspect

  9. linux文件编辑

    1.VIM基本概述 1.什么是VIM? vi和vim是Linux下的一个文本编辑工具.(可以理解为windows的记事本,或word文档) 2.为什么要使用VIM? 因为Linux系统一切皆为文件,而 ...

  10. 07.Java类加载问题

    目录介绍 7.0.0.1 Java内存模型里包含什么?程序计数器的作用是什么?常量池的作用是什么? 7.0.0.2 什么是类加载器?类加载器工作机制是什么?类加载器种类?什么是双亲委派机制? 7.0. ...