热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

用new隐藏基类方法的小疑问

问题问题的完整代码在最下面Temp这个派生类中  publicvoidA(){Console.WriteLine(Temp.A);}publi

问题


问题的完整代码在最下面

Temp这个派生类中

 

 

   public void A()
{
Console.WriteLine("Temp.A");
}

public void AV()
{
Console.WriteLine("Temp.AV");
}

这两个方法加不加new有何区别

不加的话也是把基类TempBase对应的方法给隐藏掉了(在我看来是这样的,貌似)


 

如果真的是这样,有没有new

就是代码规范上的问题了 

 


 


TempBase类中AV()这个方法是虚拟的,规范上 可以直接隐藏掉吗(用new或直接不写new,像上面的代码那样)

 

编译后,VS是有提示“如果是有意隐藏,请使用关键字 new”  “若要使当前成员重写该实现,请添加关键字 override。否则,添加关键字 new”... 

关键我想知道这里面的区别和知识点...   我初学不久,听听前辈几句简单的概括,应该受益匪浅...XXXDDD

 


ALL

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
TempBase tempBase
= new TempBase();
Temp temp
= new Temp();
TempBase tb
= temp;

while (true)
{
tempBase.A();
tempBase.AV();
tempBase.B();
tempBase.BV();

temp.A();
temp.AV();
temp.B();
temp.BV();

tb.A();
tb.AV();
tb.B();
tb.BV();
}
}
}

class TempBase
{
public void A()
{
Console.WriteLine(
"TempBase.A");
}

public virtual void AV()
{
Console.WriteLine(
"TempBase.AV");
}

public void B()
{
Console.WriteLine(
"TempBase.B");
}

public virtual void BV()
{
Console.WriteLine(
"TempBase.BV");
}
}

class Temp : TempBase
{
public void A()
{
Console.WriteLine(
"Temp.A");
}

public void AV()
{
Console.WriteLine(
"Temp.AV");
}

public new void B()
{
Console.WriteLine(
"Temp.B");
}

public override void BV()
{
Console.WriteLine(
"Temp.BV");
}
}
}

 


 


 



最佳回答


确实隐藏了,加不加其实效果一样。加就是为了语意明确。没有什么别的区别。调用基类的方法。base.方法名。



推荐阅读
author-avatar
-起司Cheese-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有