看书中的例子没敲代码,始终不敢确定是什么。今天心痒,就测试了一把。
当然,不只是那个答案。也测试了其他的疑问。为了方便看答案加入了分割数据。

Code
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ConsoleApplication2
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Number num = new Number();
13 num.ShowNumber();
14 num.ShowInfo();
15 IntNnumber intnum = new IntNnumber();
16 Console.WriteLine("1111111111111111111111111111111");
17
18 intnum.ShowNumber();
19 Console.WriteLine("2222222222222222222222222222222222222222");
20 intnum.ShowInfo();
21 Console.WriteLine("3333333333333333333333333333333333");
22
23 Number number = new IntNnumber();
24 number.ShowInfo();
25 Console.WriteLine("44444444444444444444444444444444444444444");
26 number.ShowNumber();
27
28 Console.ReadLine();
29 }
30 }
31
32 class Number
33 {
34 public static int i = 123;
35 public virtual void ShowInfo()
36 {
37 Console.WriteLine("base class --");
38 }
39
40 public virtual void ShowNumber()
41 {
42 Console.WriteLine(i.ToString());
43 }
44
45 }
46
47
48 class IntNnumber:Number
49 {
50 new public static int i =456;
51 public new virtual void ShowInfo()
52 {
53 Console.WriteLine("derve class --");
54 }
55
56 public override void ShowNumber()
57 {
58 Console.WriteLine("bas"+Number.i.ToString());
59 Console.WriteLine("der"+i.ToString());
60 }
61
62 }
63
64
65
66 }
67
答案是:
123
base class --
1111111111111111111111111111111
bas123
der456
2222222222222222222222222222222222222222
derve class --
3333333333333333333333333333333333
base class --
44444444444444444444444444444444444444444
bas123
der456
第二种情况是IntNumber中的showInfo()方法不用new而是用override则答案是
123
base class --
1111111111111111111111111111111
bas123
der456
2222222222222222222222222222222222222222
derve class --
3333333333333333333333333333333333
derve class --
44444444444444444444444444444444444444444
bas123
der456
明白了,再看new在不同场合的定义
1,作为运算符,用于创建对象和调用构造函数。
2,作为修饰符,用于向基类成员隐藏继承成员。
作为修饰符,基本的规则可以总结为:实现派生类中隐藏方法,则基类方法必须定义为virtual,
将基类方法实现为vvirtual,能同时保证向前扩展和向后兼容,在派生类中通过new或override进行灵活控制。
new作为修饰符,实现隐藏基类成员时,不可和override共存,应为两者是互斥的:new用于实现创建新成员,同时隐藏基类的同名成员;
而override用于实现对基类成员的扩展。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗