คำเตือน "ใช้คำหลักใหม่หากมีการซ่อนไว้"


101

ฉันมีคำเตือนที่ด้านล่างของหน้าจอ:

คำเตือน 1 'WindowsFormsApplication2.EventControlDataSet.Events' ซ่อนสมาชิกที่สืบทอดมา 'System.ComponentModel.MarshalByValueComponent.Events' ใช้คีย์เวิร์ดใหม่หากตั้งใจซ่อน C: \ Users \ myComputer \ Desktop \ Event Control \ WindowsFormsApplication2 \ EventControlDataSet.Designer.cs 112 32 eventControl

ถ้าฉันดับเบิลคลิกมันจะขึ้นมาพร้อมกับ:

public EventsDataTable Events {
    get {
        return this.tableEvents;
    }

ใครช่วยบอกวิธีกำจัดสิ่งนี้ได้ไหม

คำตอบ:


145

ชั้นเรียนของคุณมีคลาสพื้นฐานและคลาสฐานนี้ยังมีคุณสมบัติ (ซึ่งไม่ใช่เสมือนหรือนามธรรม) ที่เรียกว่าเหตุการณ์ซึ่งถูกแทนที่โดยคลาสของคุณ หากคุณตั้งใจจะลบล้างให้ใส่คำหลัก "ใหม่" ไว้หลังตัวแก้ไขสาธารณะ เช่น

public new EventsDataTable Events
{
  ..
}

หากคุณไม่ต้องการลบล้างให้เปลี่ยนชื่อคุณสมบัติของคุณเป็นอย่างอื่น


23
นี่คือลิงค์สำหรับทุกคนที่ต้องการทราบว่าความแตกต่างระหว่าง new และ override คืออะไร
starsplusplus

new คำหลักที่จะได้รับการกำจัดรวบรวมข้อผิดพลาด แต่อาจนำพฤติกรรมที่ไม่พึงประสงค์อื่น ๆ ฉันคิดว่าคุณควรเพิ่มคำเตือนในคำตอบของคุณ newที่จะเป็นประโยชน์สำหรับการทำความเข้าใจผลกระทบของการเพิ่ม
ahong

13

@wdavo ถูกต้อง. เช่นเดียวกับฟังก์ชัน

หากคุณแทนที่ฟังก์ชันพื้นฐานเช่นอัปเดตจากนั้นในคลาสย่อยของคุณคุณต้อง:

new void Update()
{
  //do stufff
}

หากไม่มีสิ่งใหม่ในช่วงเริ่มต้นของการลดฟังก์ชันคุณจะได้รับค่าสถานะคำเตือน


6

ในรหัสด้านล่างClass Aดำเนินการอินเตอร์เฟซและการดำเนินการวิธีการIShow สืบทอด ในการใช้วิธีการเราต้องใช้คำหลักในวิธีการเพื่อซ่อนเมธอดคลาสฐานและใช้คำหลักเพื่อขยายเมธอดShowDataClass BClass AShowDataClass BnewShowDataClass Aoverride

interface IShow
{
    protected void ShowData();
}

class A : IShow
{
    protected void ShowData()
    {
        Console.WriteLine("This is Class A");
    }
}

class B : A
{
    protected new void ShowData()
    {
        Console.WriteLine("This is Class B");
    }
}

3
ไม่มีoverrideในตัวอย่างของคุณจากการอธิบายของคุณและoverrideไม่จำเป็น
Etienne Faucher

ฉันคิดว่าตัวอย่างของคุณมาถูกทางแล้ว แต่ยังไม่สมบูรณ์ นอกจากนี้คำอธิบายของคุณยังไม่ชัดเจน คุณช่วยแก้ไขคำตอบของคุณให้เป็นdotnetfiddle.net/Iw0OzB ได้ไหม ถ้าไม่ฉันอาจจะโพสต์ซอของฉันเป็นคำตอบอื่น
ahong

0

ฟังก์ชันพาเรนต์ต้องการvirtualคีย์เวิร์ดและฟังก์ชันลูกต้องการoverrideคีย์เวิร์ดที่อยู่หน้านิยามฟังก์ชัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.