সতর্কতা "লুকানোর উদ্দেশ্যে থাকলে নতুন কীওয়ার্ডটি ব্যবহার করুন"


101

আমার পর্দার নীচে আমার একটি সতর্কতা রয়েছে:

সতর্কতা 1 'উইন্ডোজফর্মস অ্যাপ্লিকেশন 2.এভেন্টকন্ট্রোলডেটসেট.এভেন্টস' উত্তরাধিকার সূত্রে প্রাপ্ত সদস্যদের 'সিস্টেম.কম্পোনমোডেল.মার্শালবাইভ্যালু কম্পোনেন্ট.এভেন্টস' লুকায়। নতুন কীওয়ার্ডটি ব্যবহার করুন যদি লুকানোর উদ্দেশ্য ছিল। সি: \ ব্যবহারকারীগণ \ মাই কম্পিউটার কম্পিউটার \ ডেস্কটপ \ ইভেন্ট নিয়ন্ত্রণ \ উইন্ডোজফর্মস অ্যাপ্লিকেশন 2 \ ইভেন্টকন্ট্রোলডেটসেট.ডিজাইনার.সি 112 32 ইভেন্ট কনট্রোল

আমি যদি এটিতে ডাবল ক্লিক করি তবে তা সামনে আসে:

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

কেউ কীভাবে আমাকে এ থেকে মুক্তি পেতে পারেন?

উত্তর:


144

আপনার শ্রেণীর একটি বেস শ্রেণি রয়েছে এবং এই বেস শ্রেণীর একটি ইভেন্টও রয়েছে (যা ভার্চুয়াল বা বিমূর্ত নয়) নামে পরিচিত ইভেন্টগুলি যা আপনার শ্রেণীর দ্বারা ওভাররাইড করা হচ্ছে। যদি আপনি ওভাররাইড করতে চান তবে এটি সর্বজনীন পরিবর্তনের পরে "নতুন" কীওয়ার্ডটি রাখুন। ই জি

public new EventsDataTable Events
{
  ..
}

আপনি যদি ওভাররাইড করতে না চান তবে এটি আপনার সম্পত্তিগুলির নামটিকে অন্য কোনও কিছুতে পরিবর্তন করুন।


23
নতুন এবং ওভাররাইডের মধ্যে পার্থক্য কী তা জানতে চায় এমন সবার জন্য এখানে একটি লিঙ্ক is
স্টারস্প্লপ্লাস

new শব্দ সংকলন ত্রুটি পরিত্রাণ পেতে হবে, কিন্তু অন্যান্য অনিচ্ছাকৃত আচরণ পরিচয় করিয়ে দিতে পারে। আমি মনে করি আপনার উত্তরের একটি সতর্কতা যুক্ত করা উচিত। এটি যুক্ত করার পরিণতি বোঝার জন্য সহায়ক হবে new
অহং

13

@Wdavo ঠিক আছে। একই ফাংশন জন্য সত্য।

আপনি যদি আপডেটের মতো কোনও বেস ফাংশন ওভাররাইড করে থাকেন তবে আপনার সাবক্লাসে আপনার প্রয়োজন:

new void Update()
{
  //do stufff
}

ফাংশন ঘোষণার শুরুতে নতুন ছাড়া আপনি সতর্কতা পতাকা পাবেন।


6

নীচের কোডে, Class Aইন্টারফেস প্রয়োগ করে IShowএবং এর পদ্ধতিটি প্রয়োগ করে ShowDataClass Bউত্তরাধিকারী Class A। ব্যবহারের জন্য ShowDataপদ্ধতি Class B, আমরা শব্দ ব্যবহার করতে হবে newShowDataঅর্ডার বেস বর্গ লুকাতে পদ্ধতি 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প্রয়োজন হয় না।
এটিয়েন

আমি মনে করি আপনার উদাহরণটি সঠিক পথে রয়েছে তবে এটি অসম্পূর্ণ। এছাড়াও আপনার ব্যাখ্যাটি অস্পষ্ট। আপনি কি নিজের উত্তরটি ডটনেটফিডালটনেট / আইডব্লিউজবি এর মতো আরও কিছু হতে পারে ? যদি না হয় আমি সম্ভবত আমার উত্তরটি অন্য উত্তর হিসাবে পোস্ট করব
অহং

0

প্যারেন্ট ফাংশনটির virtualকীওয়ার্ড দরকার হয় , এবং overrideফাংশন সংজ্ঞার সামনে শিশু ফাংশনের কীওয়ার্ডটি প্রয়োজন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.