সি # তে জাভার ফাইনালের সমতুল্য কত?


559

finalসি # তে জাভার সমতুল্য কত ?


131
ক্লাসের শীর্ষে থাকা একটি মন্তব্য যা "আপনি যদি এই শ্রেণিকে ওভাররাইড করেন তবে আপনাকে বরখাস্ত করা হবে!" (অবশ্যই এটি একটি রসিকতা :)
হেমন্ত

উত্তর:


860

finalশব্দ জাভা বিভিন্ন ব্যবহারগুলির হয়েছে। এটি সি # তে কীওয়ার্ড sealedএবং readonlyকীওয়ার্ড উভয়ের সাথেই মিল রয়েছে, এটি যে প্রসঙ্গে ব্যবহৃত হয়েছে তার উপর নির্ভর করে।

ক্লাস

সাবক্লাসিং (সংজ্ঞায়িত শ্রেণীর উত্তরাধিকার) প্রতিরোধ করতে:

জাভা

public final class MyFinalClass {...}

সি শার্প

public sealed class MyFinalClass {...}

পদ্ধতি

কোনও virtualপদ্ধতির ওভাররাইডিং প্রতিরোধ করুন ।

জাভা

public class MyClass
{
    public final void myFinalMethod() {...}
}

সি শার্প

public class MyClass : MyBaseClass
{
    public sealed override void MyFinalMethod() {...}
}

জোয়াচিম সাউর যেমন উল্লেখ করেছেন, এখানে দুটি ভাষার মধ্যে একটি উল্লেখযোগ্য পার্থক্য হ'ল জাভা ডিফল্টরূপে সমস্ত অ স্থির পদ্ধতি virtualচিহ্নিত করে, যেখানে সি # এগুলিকে চিহ্নিত করে sealed। অতএব, আপনি কেবল sealedসি # তে কীওয়ার্ডটি ব্যবহার করতে হবে যদি আপনি virtualবেস শ্রেণিতে স্পষ্টভাবে চিহ্নিত করা একটি পদ্ধতির আরও ওভাররাইডিং বন্ধ করতে চান ।

ভেরিয়েবল

কেবল একবার ভেরিয়েবলকে বরাদ্দ করার অনুমতি দেওয়ার জন্য:

জাভা

public final double pi = 3.14; // essentially a constant

সি শার্প

public readonly double pi = 3.14; // essentially a constant

পার্শ্ব নোট হিসাবে, readonlyকীওয়ার্ডের প্রভাবটি এর চেয়ে আলাদা হয়const যে শব্দ readonlyঅভিব্যক্তি এ মূল্যায়ন করা হয় রানটাইম বদলে কম্পাইল-টাইম , অত নির্বিচারে এক্সপ্রেশন অনুমতি দেয়।


15
আমি যুক্ত করব যে জাভাতে সমস্ত অ স্থির পদ্ধতি ডিফল্টরূপে ভার্চুয়াল। সুতরাং সি # এ আপনি প্রাথমিক সংজ্ঞাটিতে কেবল ভার্চুয়ালটি ছেড়ে দিতে পারেন, জাভাতে সাবক্লাসগুলি ওভাররাইডিং এড়াতে আপনাকে "ফাইনাল" ব্যবহার করতে হবে
জোয়াকিম সৌর

166
ভাল উত্তর - জাভাতে আরও একটি "চূড়ান্ত" ব্যবহার রয়েছে - এটি পুনরায় সাইন ইন করা রোধ করতে স্থানীয় ভেরিয়েবল বা পদ্ধতি প্যারামিটারে। এর কোনও সি # সরাসরি সমতুল্য নেই।
সার্জ 10

17
readonlyসদস্য ভেরিয়েবলগুলি কনস্ট্রাক্টরগুলিতে সংশোধন করা যেতে পারে: পেস্টবিন.এজক্জওয়াইজিআইএ
পুনরাবৃত্তকারী

8
এছাড়াও মনে রাখবেন: আপনি যদি জাভা চূড়ান্ত হিসাবে একজন সদস্য ভেরিয়েবল ডিক্লেয়ার পারেন, কম্পাইলার অভিযোগ করবে যদি প্রত্যেক কন্সট্রাকটর নির্ধারণ না থাকাকালীন C # এর যে কোড পাথ একটি মান মাত্র কেবলমাত্র সদস্য ভেরিয়েবল সঙ্গে যে দৃশ্যকল্প মধ্যে একটি সতর্কবার্তা প্রকাশ
Mene

1
@ নিকোলেকন্ড্রাটয়েভ: হ্যাঁ, আমার উদাহরণটি এতে অন্তর্নিহিত ছিল যে আপনাকে অন্য শ্রেণির থেকে সাবক্লাসিং করা দরকার। আপনার সত্যিকারের ইন্টারফেসের দরকার নেই; এটি অতিমাত্রায়, তবে অন্যথায় এটি সঠিক দেখায়।
নলডোরিন

180

ইহা পারিপার্শ্বিক অবস্থা উপর নির্ভর করে।

  • একটি জন্য finalবর্গ বা পদ্ধতি, সি # সমতূল্যsealed
  • একটি finalক্ষেত্রের জন্য, সি # সমতুল্যreadonly
  • একটি জন্য finalস্থানীয় পরিবর্তনশীল বা পদ্ধতি প্যারামিটার কোন সরাসরি C # এর সমতুল্য নয়।

1
আসলে এটি ঘোষণার সময় কোনও চূড়ান্ত পরিবর্তনশীল বরাদ্দ করার প্রয়োজন নেই। 'চূড়ান্ত' এর অর্থ হল ভেরিয়েবলটি রেফারেন্সের আগে কিছু কোড পাথ দ্বারা নির্ধারিত হতে হবে এবং কোনও কোড পাথ চলকটিকে একাধিকবার বরাদ্দ করার অনুমতি দেয় না। এটি উদাহরণস্বরূপ ভেরিয়েবলগুলিতে প্রযোজ্য, এর ফলস্বরূপ এর অর্থ দাঁড়ায় যে কনস্ট্রাক্টরদের অবশ্যই ভেরিয়েবলটি স্পষ্টরূপে বরাদ্দ করতে হবে।
জয়

31
+ + জন্য For a final local variable or method parameter, there's no direct C# equivalentএকটি বিশাল পার্থক্য।
ড্যানিয়েল বি চ্যাপম্যান

1
যদি আপনি তাত্ক্ষণিকর হন , তবে স্থানীয় ভেরিয়েবলের জন্য কনস্ট ব্যবহার করা যেতে পারে। এটি সমতুল্য নয় কারণ অবশ্যই চূড়ান্ত আপনাকে পৃথকভাবে ঘোষণা করতে এবং আরম্ভ করতে দেয় (এবং এর সাথে বিভিন্ন মান রয়েছে) তবে কেবল যদি আপনি না জানতেন তবে ...
গ্রিকনোক

3
constশুধুমাত্র মান ধরণের ক্ষেত্রে ব্যবহার করা যেতে পারে। আমি যতদূর জানি স্থানীয় রেফারেন্স ধরণের জন্য কার্যকর ধ্রুবক তৈরি করার কোনও উপায় নেই।
জোকুল

2
@ জোকুল স্ট্রিংগুলির সাথে একমাত্র ব্যতিক্রম।
রায়মুন্ড ক্রিমার

46

এখানে সকলেই যা অনুপস্থিত তা হ'ল জাভা চূড়ান্ত সদস্য ভেরিয়েবলের জন্য নির্দিষ্ট কার্যভারের গ্যারান্টি।

চূড়ান্ত সদস্যের ভেরিয়েবল ভের সাথে ক্লাস সি এর জন্য, সি এর প্রতিটি কনস্ট্রাক্টরের মাধ্যমে প্রতিটি সম্ভাব্য নির্বাহের পথে অবশ্যই একবার ভিকে অর্পণ করতে হবে - ভি বরাদ্দ করতে ব্যর্থ হওয়া বা দু'বার বা তার বেশি সময় নির্ধারণের ফলে ত্রুটি ঘটবে।

সি # এর পঠনযোগ্য কী-ওয়ার্ডের কোনও গ্যারান্টি নেই - সংকলকটি কেবল পাঠানো সদস্যদের অনির্ধারিত রেখে বা কনস্ট্রাক্টরের মধ্যে আপনাকে একাধিকবার নির্ধারিত করার অনুমতি দেওয়ার চেয়ে আনন্দিত।

সুতরাং, চূড়ান্ত এবং পঠনযোগ্য (অন্তত সদস্য ভেরিয়েবলের ক্ষেত্রে সম্মানের সাথে) অবশ্যই সমতুল্য নয় - চূড়ান্ত অনেক বেশি কঠোর।


7

উল্লিখিত হিসাবে, sealedএকটি সমতুল্যfinal পদ্ধতি এবং ক্লাস জন্য ।

বাকী হিসাবে, এটি জটিল।

  • জন্য static finalক্ষেত্র,static readonly সর্বনিকটবর্তী বস্তু সম্ভব। এটি আপনাকে স্ট্যাটিক ফিল্ডটি একটি স্ট্যাটিক কনস্ট্রাক্টরটিতে আরম্ভ করার অনুমতি দেয় যা জাভাতে স্থির আরম্ভের সাথে মোটামুটি মিল। এটি উভয়ই ধ্রুবকগুলিতে (আদিম এবং অপরিবর্তনীয় বস্তু) এবং পরিবর্তনীয় বস্তুর ধ্রুবক উল্লেখগুলির জন্য প্রযোজ্য।

    দ্য constপরিবর্তক মোটামুটি ধ্রুবক জন্য অনুরূপ, কিন্তু আপনি তাদের একটি স্ট্যাটিক কন্সট্রাকটর সেট করতে পারবে না।

  • এমন একটি ক্ষেত্র যা কন্সট্রাক্টর ছেড়ে যাওয়ার পরে পুনরায় নিয়োগ করা উচিত নয়, readonlyব্যবহার করা যেতে পারে। যদিও এটি সমান নয় -final এমনকি কনস্ট্রাক্টর বা ইনিশিয়ালাইজারেও ঠিক একটি অ্যাসাইনমেন্ট প্রয়োজন।
  • finalআমি পরিচিত স্থানীয় ভেরিয়েবলের জন্য কোনও সি # সমতুল্য নেই। আপনি যদি ভাবছেন যে কারও প্রয়োজন কেন: আপনি যদি অন্যথায়, স্যুইচ-কেস বা তার আগে একটি পরিবর্তনশীল ঘোষণা করতে পারেন। এটি চূড়ান্ত ঘোষণা করে, আপনি প্রয়োগ করেন যে এটি একবারে অর্পণ করা হয়েছে।

    সাধারণভাবে জাভা স্থানীয় ভেরিয়েবলগুলি পড়ার আগে কমপক্ষে একবার নির্ধারণ করা প্রয়োজন। মান পড়ার আগে যদি শাখাটি লাফ না দেয়, চূড়ান্ত পরিবর্তনশীল ঠিক একবার বরাদ্দ করা হয়। এই সমস্ত সংকলন সময় চেক করা হয়। এটির জন্য একটি ত্রুটির জন্য কম মার্জিন সহ ভাল আচরণ করা কোড দরকার।

সংক্ষেপে বলা যায়, সি # এর কোনও সরাসরি সমতুল্য নেই final। জাভাতে সি # এর কিছু সুন্দর বৈশিষ্ট্য নেই, তবে জাভা প্রোগ্রামার হিসাবে এটি আমার জন্য সতেজ হয় যেখানে সি # সমতুল্য বিতরণ করতে ব্যর্থ হয়।


6

জাভা ক্লাস চূড়ান্ত এবং পদ্ধতি চূড়ান্ত -> সিল। জাভা সদস্যের পরিবর্তনশীল চূড়ান্ত -> রানটাইম ধ্রুবকটির জন্য কেবলমাত্র পঠনযোগ্য, সংকলনের সময় ধ্রুবকের জন্য কনস্ট।

স্থানীয় পরিবর্তনশীল চূড়ান্ত এবং পদ্ধতি আর্গুমেন্ট ফাইনালের সমতুল্য নয়


5

http://en.csharp-online.net/CSharp_FAQ:_What_are_the_differences_between_CSharp_and_Java_constant_declarations

সি # ধ্রুবকগুলি সংকলন সময়ের ধ্রুবকগুলির জন্য কনস্ট কীওয়ার্ড বা রানটাইম ধ্রুবকগুলির জন্য পঠনযোগ্য কীওয়ার্ড ব্যবহার করে ঘোষিত হয়। সি # এবং জাভা উভয় ভাষায় ধ্রুবকের শব্দার্থকতা একই is


0

বদ্ধ


8
যে উত্তরটি কেবলমাত্র প্রসঙ্গের উপর নির্ভর করে এবং ব্যাখ্যা এবং / বা উদাহরণ যুক্ত করলে এটি সহায়তার প্রয়োজন তাদের পক্ষে এটি অনেক বেশি হজমযোগ্য হয়ে উঠবে
রুন এফএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.