"नए कीवर्ड का उपयोग करें यदि छिपाना इरादा था" चेतावनी


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;
    }

क्या कोई मुझे बता सकता है कि इससे कैसे छुटकारा पाया जाए?

जवाबों:


144

आपकी कक्षा में एक बेस क्लास है, और इस बेस क्लास में एक प्रॉपर्टी (जो वर्चुअल या एब्सट्रैक्ट नहीं है) इवेंट्स कहलाती है जो आपकी क्लास द्वारा ओवरराइड की जा रही है। यदि आप इसे ओवरराइड करने का इरादा रखते हैं तो सार्वजनिक संशोधक के बाद "नया" कीवर्ड डाल दें। ईजी

public new EventsDataTable Events
{
  ..
}

यदि आप इसे ओवरराइड करने की इच्छा नहीं रखते हैं तो अपने गुणों के नाम को कुछ और बदल दें।


23
यहां किसी के लिए भी एक लिंक है जो जानना चाहता है कि नए और ओवरराइड के बीच अंतर क्या है।
स्टारप्लस

new कीवर्ड संकलन त्रुटि से छुटकारा पाने होगा, लेकिन अन्य अनपेक्षित व्यवहार का परिचय हो सकता है। मुझे लगता है कि आपको अपने जवाब में एक चेतावनी जोड़नी चाहिए। जो जोड़ने के परिणामों को समझने में मददगार होगा new
आहोंग

13

@wdavo सही है। यही कार्य के लिए भी सही है।

यदि आप अद्यतन की तरह एक आधार फ़ंक्शन को ओवरराइड करते हैं, तो आपके उपवर्ग में आपको आवश्यकता है:

new void Update()
{
  //do stufff
}

फ़ंक्शन डिक्लेरेशन की शुरुआत में नए के बिना आपको चेतावनी ध्वज मिलेगा।


6

नीचे दिए गए कोड में, Class Aइंटरफ़ेस को लागू करता है IShowऔर इसकी विधि को लागू करता है ShowDataClass Bविरासत में मिला Class A। उपयोग करने के लिए ShowDataमें विधि Class B, हम कीवर्ड का उपयोग करना पड़ newमें ShowDataआदेश आधार वर्ग को छिपाने के लिए विधि Class Aविधि और प्रयोग overrideआदेश विधि का विस्तार करने में कीवर्ड।

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भी नहीं है और इसकी आवश्यकता नहीं है।
एटिएन फॉचर

मुझे लगता है कि आपका उदाहरण सही रास्ते पर है, लेकिन अधूरा है। इसके अलावा आपकी व्याख्या अस्पष्ट है। क्या आप अपने जवाब को कुछ और तरह संपादित कर सकते हैं जैसे कि dotnetfiddle.net/Iw0OzB ? अगर नहीं तो मैं शायद एक और जवाब के रूप में अपनी बेला पोस्ट कर दूंगा
8

0

पैरेंट फ़ंक्शन को virtualकीवर्ड की आवश्यकता होती है , और फ़ंक्शन फ़ंक्शन के overrideसामने चाइल्ड फ़ंक्शन को कीवर्ड की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.