[C#] 关键字 new,除构造函数可用外,你知道还可以这样用吗?

[C#] 关键字 new,除构造函数可用外,你知道还可以这样用吗?


如主题,不多说,直接看本文。

一般使用 new 操作符不外乎是在 new 一个建构(函)式,如果说今天用在继承类,同时 new 一个与基底类同一个变量名称时,您是否有见过呢?

就来看看下面的范例吧~

执行画面:

image

上画面说明如下:

BaseClassA 即是基底类 (父类),该类中有个 i 的变量

ExtendClassB 是子类,继承 BassClassA 类,同时该类中也有个同样的 i 变量

然后在主程序执行中,在初始化 ExtendClassB 类 ( 变量名称下方为 ClassB ) 时,同时分别给定 1 与 5,即给 BaseClassAExtendClassB 两者间的 i

此程序主要是说明:

→  可以理解为: 透过 new 关键字在 ExtendClassB 之子类中同样设计一个 int 类型的 i 变量 ( 此 i 变量与父类BaseClassA 中的 i 变量相同 ),意即把父类i 变量隐藏起来,而使用子类i 变量

→ 其目的是:

子类可以定义与父类同名的成员,在 C# 上并不算是错误,但编译器还是会出现一个警告,其警告是说明已经隐藏了一个名称。而如果要避免出现此警告,就透过在子类中加上 new 关键字即可。

程序解说:

1. 先建立一个 Console 的项目。

2. 在 Program.cs 文件中输入如下的程序:

下方分别建立 BaseClassA (父类) 及 ExtendClassB (子类)

image

上方程序说明:

① 处,是父类,并声明一个 int 类型的 i 变量

② 处,是子类,并继承 BaseClassA (父类)

③ 处,透过 new 关键字把父类的 i 变量隐藏起来,并建立一个 int 类型之同名 i 变量

④ 处,是当 ExtendClassB 初始化时,同时给定两值,并分别给 BaseClassA 的 i 变量值,及 ExtendClassB 的 i 变量值

⑤ 处,是当要调用 BaseClassA 类中的 i 值时,使用 base 关键字来调用

image

在 Main 处理进程中,初始化 ExtendClassB 之 ClassB 变量, 并给定 1  及 5 值 ( 上图 ① 处 ),然后再透过 showAllResult 方法 ( 上图 ② 处 ) 再把其结果呈现出来。

后记:

上述内容参考 C# 完全参考手册 乙书之 第十一章 继承  的 11.4 继承和名称隐藏