"তাত্ক্ষণিক" এবং "আরম্ভ করা" এর মধ্যে পার্থক্য কী?


105

আমি VB.NET এর জন্য মাইক্রোসফ্ট টিউটোরিয়ালে ব্যবহৃত এই দুটি শব্দ শুনে আসছি। ভেরিয়েবলের রেফারেন্সে ব্যবহৃত হলে এই দুটি শব্দের মধ্যে পার্থক্য কী?

উত্তর:


142

রেফারেন্সের ধরণের ধরণের মান

সি # তে চলকগুলি 2 টির মধ্যে 1 টিতে রয়েছে। মান প্রকার বা রেফারেন্স প্রকার। প্রকারভেদ পছন্দ intএবং DateTimeহয় মান ধরনের। বিপরীতে, আপনার তৈরি করা কোনও শ্রেণি একটি রেফারেন্স টাইপ। সি # স্ট্রিংগুলিও একটি রেফারেন্স টাইপ। .NET ফ্রেমওয়ার্কের বেশিরভাগ জিনিসই রেফারেন্সের ধরণ।

একটি চলক অংশ

এখানে ভেরিয়েবলের নাম এবং এর মানদুটি অংশ

ভেরিয়েবলের নামটি আপনি এটি হিসাবে ঘোষণা করেন। মান কি তুমি ধার্য এটি।

চলকগুলি সূচনা হয়

ভেরিয়েবল ঘোষণার সময় সমস্ত ভেরিয়েবলকে সর্বদা প্রাথমিক মান দেওয়া হয় । সুতরাং সমস্ত ভেরিয়েবল সূচনা করা হয়

জন্য মান ধরনের, মত intকম্পাইলার তাদের একটি বৈধ মান যদি আপনি তা স্পষ্টভাবে না দেব। intএর আরম্ভ ডিফল্টরূপে শুন্যতে, DateTimeএর আরম্ভ করার DateTime.MinValueডিফল্টরূপে।

রেফারেন্স প্রকারের ভেরিয়েবলগুলি আপনি যে বস্তুর এটি দিয়েছিলেন তা সূচনা করে। সংকলক কোনও বস্তু (অর্থাত্ একটি বৈধ মান) বরাদ্দ করবে না যদি আপনি না করেন। এক্ষেত্রে মানটি null- কিছুই নয় nothing সুতরাং আমরা বলতে যে রেফারেন্স সক্রিয়া নাল করতে।

অবজেক্টগুলি ইনস্ট্যান্টিয়েটেড হয়

মানুষের জন্ম হয়। বস্তু তাত্ক্ষণিক হয়। একটি শিশু হিউম্যানের উদাহরণ , একটি বস্তু কোনও কোনও শ্রেণীর উদাহরণ

কোনও শ্রেণীর উদাহরণ তৈরির কাজটিকে তাত্ক্ষণিকরণ (তা-দা!) বলা হয়

সুতরাং ঘোষণা করুন , আরম্ভ করুন এবং তাত্ক্ষণিকভাবে এভাবে একসাথে আসুন

MyClass myClassyReference = new MyClass();

উপরে, এটা বলা ভুল "... একটি একটি দৃষ্টান্ত তৈরি বস্তুর ..."


সম্পাদনা - মন্তব্য আলোচনার মাধ্যমে অনুপ্রাণিত

স্বতন্ত্র পরিভাষা ব্যবহার করে তিনটি স্বতন্ত্র জিনিস চলছে (উপরে) এবং সেই পরিভাষাটি বিনিময়যোগ্য নয়:

  1. একটি রেফারেন্স ভেরিয়েবল ঘোষণা করা হয় - MyClass myClassyReference
  2. কোনও অবজেক্ট ইনস্ট্যান্টিয়েটেড হয় (... প্রদত্ত শ্রেণীর থেকে / অন্তর্নিহিত) -new MyClass()
  3. বস্তুটি ভেরিয়েবলের জন্য বরাদ্দ করা হয়। =

তথ্য পুনরায়:

  1. একটি রেফারেন্স-টাইপ ভেরিয়েবলকে কেবল "একটি রেফারেন্স" বলা হয়। একটি "মান-ধরণের ভেরিয়েবল" কোনও রেফারেন্স নয়।

  2. এটি: "অবজেক্টএ কোনও অবজেক্টের উদাহরণ" গভীরভাবে ভুল। যদি অবজেক্টএ "অবজেক্টবি'র উদাহরণ ছিল" তবে অবশ্যই এটি হতে হবে যে অবজেক্টএ জীবন শুরু করবে অবজেক্টবি'র টাইপ - যা কিছু হোক - এবং বর্তমান অবস্থা - যা কিছু হোক না কেন। অবজেক্টবি পরিবর্তন হিসাবে D, E এবং F অবজেক্ট তৈরি করার বিষয়ে কী বলা যায়? না, না! এটি ধারণাগত এবং প্রযুক্তিগত ক্ষেত্রে "অবজেক্টএ একটি শ্রেণীর উদাহরণ"। "ইনস্ট্যান্টেশন" এবং "উদাহরণ" এর সুনির্দিষ্ট অর্থ রয়েছে - কোনও শ্রেণি থেকে কোনও বস্তুর তার ধরণ, সংজ্ঞা এবং মান পাওয়া যায়।

  3. MyClass myClassyReference = null সাধারণত আমরা বলি না যে "ভেরিয়েবল নালকে বরাদ্দ করা হয়েছে" এবং আমরা কখনই "ভেরিয়েবলটি নালকে রেফারেন্সিং করি" না, এর পরিবর্তে আমরা "ভেরিয়েবলটি নাল" বলে না; বা "ভেরিয়েবল কিছু উল্লেখ করে না", বা "রেফারেন্স নাল"

ব্যবহারিক প্রয়োগ:

  • আমি আপনার কোডটিতে আমার আঙুলটি চেপে ধরে বলি "এই দৃষ্টান্তটির একটি অবৈধ সম্পত্তি রয়েছে Maybe সম্ভবত সে কারণেই লুপটি ব্যর্থ হয় an আপনি ইনস্ট্যান্টেশনের সময় প্যারামিটারগুলি বৈধ করতে হবে।" (অর্থাত্ নির্মাণকারী যুক্তি)।

  • আমি আপনার কোড এ এটি দেখতে,

    MyClass myClassyReference;
    myClassyReference.DoSomething();

    "আপনি ভেরিয়েবলটি ঘোষণা করেছেন কিন্তু কখনই বরাদ্দ করেননি it's এটি নাল তাই এটি কোনও বিষয় উল্লেখ করা হচ্ছে না That's এজন্য পদ্ধতি কলটি একটি ব্যতিক্রম ছুঁড়ে।"

শেষ সম্পাদনা


সত্তার অসহনীয় হালকাতা

একটি রেফারেন্স ধরণের ভেরিয়েবলের নাম এবং মান স্বাধীনভাবে বিদ্যমান। এবং আমি স্বাধীন বলতে চাই না।

একটি তাত্ক্ষণিক বস্তুর এর সাথে রেফারেন্স থাকতে পারে বা নাও থাকতে পারে।

একটি তাত্ক্ষণিক বস্তুর এর সাথে অনেকগুলি উল্লেখ থাকতে পারে।

একটি ঘোষিত রেফারেন্স কোনও অবজেক্টের দিকে নির্দেশ করতে পারে বা নাও পারে ।


নিখুঁত ব্যাখ্যা!
এম ফাওয়াদ সুরোশ

যদি এটি বলা ভুল হয়: "... কোনও জিনিসের উদাহরণ তৈরি করা হচ্ছে ...", আপনার কী বলা উচিত? "... কোনও বস্তু তাত্ক্ষণিকভাবে, এবং এটিতে একটি রেফারেন্স বরাদ্দ করা হচ্ছে ..."?
অ্যারন ডাকে

বা কী সম্পর্কে: "... কোনও বস্তু তাত্ক্ষণিকভাবে চালু করা, এবং এর উল্লেখের সাথে একটি ভেরিয়েবল শুরু করা"? এটি উভয় শব্দের অন্তর্ভুক্ত করে এবং মনে হয় এটি সবই বানান করে - তবে, বরং দীর্ঘতর উপায়ে। আপনি কি মনে করেন?
অ্যারন ডাকে

... তোমার কি বলা উচিত? বলুন: "শ্রেণীর উদাহরণ তৈরি করা", কোনও বস্তুর '... নয়'। এবং "এটির একটি রেফারেন্সে কোনও ভেরিয়েবল ইনস্ট্যান্ট করা" দ্বিগুণ কথাবার্তা এবং 2 উপায়ে ভুল: (1) কেবলমাত্র অবজেক্টগুলি ইনস্ট্যান্টেশনযুক্ত। (২) একটি ভ্যারিয়েবল 'পয়েন্টিং' অবজেক্টের একটি রেফারেন্স ভেরিয়েবল বা সংক্ষেপে, ভেরিয়েবলটি হল রেফারেন্স। আমি এটি অন্যভাবে বলব: একটি "রেফারেন্স টাইপ" ভেরিয়েবল একটি রেফারেন্স। এটি কোনও বস্তুকে - বা নির্দেশ করে - বোঝায়।
রাডারবব

40

একটি ভেরিয়েবল একটি মান দিয়ে আরম্ভ করা হয়। যখন কোনও বস্তু তাত্ক্ষণিকভাবে মেমরির জন্য বরাদ্দ করা হয় এবং এটির কনস্ট্রাক্টর চালিত হয়।

উদাহরণস্বরূপ এখানে একটি পরিবর্তনশীল:

Dim obj as Object

এই পরিবর্তনশীলটি আরম্ভ করা হয়নি । একবার আমি objভেরিয়েবলের জন্য একটি মান নির্ধারণ করি , ভেরিয়েবলটি আরম্ভ করা হবে। এখানে সূচনা উদাহরণ:

obj = 1
obj = "foo"

ইনস্ট্যান্টেশন একটি খুব আলাদা জিনিস তবে তবুও ইনস্ট্যান্টেশন সাধারণত আরম্ভের পরে অনুসরণ করা সম্পর্কিত:

Dim obj As New Object()

কোডের পূর্ববর্তী লাইন ইন, objপরিবর্তনশীল হয় সক্রিয়া নতুন রেফারেন্স সহ Objectছিল instantiated । আমরা বলি যে Objectনতুনটি তাত্ক্ষণিকভাবে তৈরি হয়েছিল কারণ আমরা এটির একটি নতুন উদাহরণ তৈরি করেছি।

এখন আমি বিশ্বাস করি যে ভিবি.এনইটি এটি সি # এর চেয়ে অনেক বেশি বিভ্রান্তিকর করে তোলে কারণ এটি পরিষ্কার নয় যে উপরের কোডে কোনও অ্যাসাইনমেন্ট চলছে। সি # তে এটি আরও স্পষ্ট যে এখানে একটি উদাহরণের ইনস্ট্যান্টেশন এবং ভেরিয়েবলের সূচনা উভয়ই রয়েছে:

Object obj = new Object();

@ অ্যান্ড্রু অবজেক্ট = = 1; ইনিশিয়ালাইজেশন এবং অবজেক্ট অবজেক্ট = নতুন অবজেক্ট () / এটি ইনস্ট্যান্টেশন এবং ইনিশিয়ালাইজেশন এটিই আপনি উল্লেখ করেছেন। এখন আমি আপনাকে দুটি জিনিস জিজ্ঞাসা করতে চাই। 1. এটি কি? অবজেক্ট আপত্তি; ? ২. যখন আমি অবজেক্ট অবজেক্ট ব্যবহার করি তখন কি মেমরি বরাদ্দ করা হয়েছে? ?? বা আমি যখন এই কোড অবজেক্ট = 1 দ্বারা এটি আরম্ভ করি তখন এটি আলাদা হয়; ?
কাশিফ

আমি বলব "অবজেক্ট আপত্তি" হ'ল ঘোষণা, এবং না, এখনও মেমরি বরাদ্দ করা হয়নি। অথবা "নাল" এর মান ধরে রাখার জন্য কমপক্ষে কেবল পর্যাপ্ত মেমরি। ভেরিয়েবলের জন্য আসল মেমরিটি একবার শুরু হয়ে গেলে মানের ভিত্তিতে বরাদ্দ করা হবে।
অ্যারন ডাকে

14

কিছু শুরু করার জন্য এটির প্রাথমিক মান সেট করা। করতে instantiate কিছু এটি একটি দৃষ্টান্ত তৈরি করা।

প্রায়শই এটি কমবেশি একই জিনিস। এই:

SqlConnection conn = new SqlConnection();

instantiates একটি SqlConnectionবস্তু, এবং সূচনাconn যে দৃষ্টান্ত থেকে এটি সেটিং দ্বারা পরিবর্তনশীল।

যেহেতু কোনও অবজেক্টের কনস্ট্রাক্টরও বস্তুর বৈশিষ্ট্যগুলিকে তাদের ডিফল্ট মানগুলিতে সেট করে, তাই প্রায়ই এটি সঠিকভাবে বলা যায় যে কোনও বস্তুর তাত্ক্ষণিককরণ এটি আরম্ভ করে। (বিভ্রান্তিকর, যদি বস্তুটি এমন কোনও পদ্ধতি উদ্ভাসিত করে যা আপনাকে তাৎক্ষণিকভাবে ইনস্ট্যান্ট করার পরে এটি সূচনা করার জন্য কল করতে হয়, যেমনটি কখনও কখনও ঘটে থাকে))


4

* ইনস্ট্যান্টাইজেশন বলতে কোনও শ্রেণি বা অবজেক্টের জন্য উদাহরণ তৈরি করা হয় n itশক্তিকরণ বলতে * কোনও উদ্দেশ্যে একই জিনিস বা শ্রেণি শুরু করা class **



2

আপনি যখন কোনও শ্রেণি বা অবজেক্ট ইনস্ট্যান্ট করেন, আপনি এটির একটি নতুন উদাহরণ তৈরি করছেন, বা একটিটিকে "ধরে রাখতে" মেমরি বরাদ্দ করছেন। এই অবজেক্টটি আরম্ভ করা হ'ল নির্দেশনা যা তাত্ক্ষণিক সময়ে সঞ্চালিত হয়।


2

ইনস্ট্যান্টেশন হল যখন আপনি কোনও শ্রেণীর উদাহরণ তৈরি করেন। সেই উদাহরণটি তখন কোনও বস্তু এবং আপনি এর বৈশিষ্ট্যগুলি সেট করতে পারেন, বা এটিতে পদ্ধতি কল করতে পারেন (এটি কাজ করতে বলুন)।

আপনি যখন কোনও কিছুর জন্য প্রাথমিক অবস্থার একটি সেট আপ করেন তখন দীক্ষা হয়। এটি কোনও বস্তু হতে পারে, যেখানে আপনি নিজেকে এটি সূচনা করার জন্য বলছেন বা একটি ভেরিয়েবল যার সাথে আপনি কোনও মূল্য নির্ধারণ করেন।

কোনও বস্তু অন্য কিছু জিনিস সূচনা করতে পারে, বা এমনকি অন্য বস্তুকে তার দীক্ষার অংশ হিসাবে ইনস্ট্যান্টিয়েট করতে পারে।

পার্থক্যটি হ'ল ইনস্ট্যান্টেশন হল এমন একটি জিনিস যা সৃষ্টি করতে পারে of দীক্ষা এমন জিনিস যা সম্পন্ন হয়।


1

জাভা ডক্স দেখুন: https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

" পয়েন্ট অরিজিনওন = নতুন পয়েন্ট (23, 94);

Declaration: The code set in bold are all variable declarations that associate a variable name with an object type.
Instantiation: The new keyword is a Java operator that creates the object.
Initialization: The new operator is followed by a call to a constructor, which initializes the new object."

1

আমরা এটি এইভাবে দেখতে পারি। নীচের কোডের একটি লাইনের জন্য:

var p = new Person();

উপরের লাইনটি নিম্নলিখিত দুটি উপায়ে পড়া যায়:

  1. ভেরিয়েবল পি একটি ব্যক্তি শ্রেণি হিসাবে শুরু করা হয়েছে
  2. ব্যক্তি শ্রেণি পরিবর্তনশীল পি তে ইনস্ট্যান্টেশন করা হয়েছে

রেফারেন্স বা প্রসঙ্গ বিষয় বিষয়। ভেরিয়েবলের ক্ষেত্রে কথা বলার সময় আমরা আদ্যক্ষর শব্দটি ব্যবহার করি । ক্লাস / টাইপের ক্ষেত্রে কথা বলার সময় আমরা ইনস্ট্যান্টিয়েট শব্দটি ব্যবহার করি ।


0

ইনস্ট্যান্টেশন বলতে কোনও শ্রেণীর উদাহরণ তৈরি করতে মেমরির বরাদ্দকে বোঝায় যেখানে সূচনাটি সেই উদাহরণটির পরিবর্তনশীল নাম নির্ধারণ করে সেই উদাহরণটির নামকরণকে বোঝায়।

উদাহরণ: SqlConnection conn = new SqlConnection();

এখানে newএকটি কীওয়ার্ড যা একটি উদাহরণের জন্য মেমরি connবরাদ্দ করে এবং সেই উদাহরণটির জন্য নির্ধারিত একটি পরিবর্তনীয় নাম।


0

অন্যরা পার্থক্যটি ব্যাখ্যা করেছে, তাই আমি বিশদে যাব না। তবে এমন কিছু ঘটনা রয়েছে যেখানে ইনস্ট্যান্টেশন কোনও জিনিসকে সঠিকভাবে আরম্ভ করে না। আপনি যখন কোনও বস্তু তাত্ক্ষণিকভাবে চালু করেন আপনি কিছু ডেটা দিয়ে এটিকে আরম্ভও করেন। শ্রেণি / প্রকারের সূচনাবিদ্যার যুক্তি থাকবে, যেখানে ইনস্ট্যান্টেশন লজিক সাধারণত মূলশব্দ দ্বারা চালিত হয় new(মূলত মেমরি বরাদ্দ, রেফারেন্স অনুলিপি ইত্যাদি)। তবে তাত্ক্ষণিকভাবে অবজেক্টগুলির জন্য কার্যকর বৈধ অবস্থার প্রয়োজন নেই যা আমরা যখন বলতে পারি যে অবজেক্টটি অবিচ্ছিন্ন করা হয়েছে । এখানে একটি ব্যবহারিক উদাহরণ যেখানে কোনও বস্তু তাত্ক্ষণিকভাবে শুরু করা যেতে পারে তবে আরম্ভ করা যায় না (দুঃখিত, সি # তে)।

class P { string name = "Ralf"; }

WriteLine(new P().name); // "Ralf";
WriteLine((FormatterServices.GetUninitializedObject(typeof(P)) as P).name); // null

GetUninitializedObject কনস্ট্রাক্টরকে সেখানে অবজেক্টটি ইনস্ট্যান্ট করার জন্য ডাকে না (তবে কিছু অভ্যন্তরীণ যাদু)।

কেউ যুক্তি দিতে পারে যে মান ধরণেরগুলি তাত্ক্ষণিকভাবে নয় তবে কেবল সূচনা করা হয় কারণ এটি করার সময় নতুন বরাদ্দের প্রয়োজন হয় না new..তবে এটি ইনস্ট্যানটিশনের সংজ্ঞা অনুসারে।

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