Ingালাই এবং জোর দেওয়া মধ্যে পার্থক্য কি?


86

আমি দুটি অনলাইন শব্দের বিভিন্ন অনলাইন ব্যাখ্যাতে প্রায় বিনিময়যোগ্য হিসাবে ব্যবহার করতে দেখেছি এবং বেশিরভাগ পাঠ্য বইয়ের সাথে আমি পরামর্শ করেছি যা এই পার্থক্য সম্পর্কে সম্পূর্ণ পরিষ্কার নয়।

আপনারা জানেন যে পার্থক্যটি ব্যাখ্যা করার সম্ভবত একটি স্পষ্ট এবং সহজ উপায় আছে?

টাইপ রূপান্তর (কখনও কখনও টাইপ কাস্ট হিসাবে পরিচিত )

অন্য প্রসঙ্গে প্রত্যাশিত প্রসঙ্গে এক ধরণের মান ব্যবহার করতে।

Nonconverting টাইপ কাস্ট (কখনও কখনও নামে পরিচিত টাইপ শ্লেষ )

এমন পরিবর্তন যা অন্তর্নিহিত বিটগুলিকে পরিবর্তন করে না।

জবরদস্তি

প্রক্রিয়া যার মাধ্যমে একটি সংকলক স্বয়ংক্রিয়ভাবে এক প্রকারের মানকে অন্য প্রকারের মানতে রূপান্তর করে যখন দ্বিতীয় প্রকারটি পার্শ্ববর্তী প্রসঙ্গে প্রয়োজন হয়।


উত্তর:


115

প্রকার রূপান্তর :

শব্দ রূপান্তর পারেন পরোক্ষভাবে বা স্পষ্টভাবে একটি মান একটি ডেটা প্রকার থেকে অন্য একটি 32 বিট পূর্ণসংখ্যা করার জন্য একটি 16 বিট পূর্ণসংখ্যা পরিবর্তন, যেমন বোঝায়।

জবরদস্তি শব্দটি অন্তর্নিহিত রূপান্তর বোঝাতে ব্যবহৃত হয়।

শব্দ নিক্ষেপ সাধারণত একটি সুনির্দিষ্ট টাইপ রূপান্তর বোঝায় (যেমন একটি অন্তর্নিহিত রূপান্তর উল্টোদিকে), কিনা এই একটি বিট-প্যাটার্ন বা একটি বাস্তব রূপান্তর পুনরায় ব্যাখ্যা নির্বিশেষে।

সুতরাং, জবরদস্তি অন্তর্নিহিত, নিক্ষিপ্ত স্পষ্ট এবং রূপান্তর হ'ল এগুলির কোনও।


কয়েকটি উদাহরণ ( একই উত্স থেকে ):

জবরদস্তি (অন্তর্নিহিত):

double  d;
int     i;
if (d > i)      d = i;

কাস্ট (স্পষ্ট):

double da = 3.3;
double db = 3.3;
double dc = 3.4;
int result = (int)da + (int)db + (int)dc; //result == 9

এটি কি "অন্তর্নিহিত জবরদস্তি" বাড়াবাড়ি তৈরি করবে? নোট এখানে উভয় "অন্তর্নিহিত বলপ্রয়োগ" এবং "স্পষ্ট বলপ্রয়োগ" ব্যবহার
ডেভ Cousineau

4
অন্তর্নিহিত রূপান্তর কেবল তখনই করা যেতে পারে যখন আপনি নির্ভুলতা হারাচ্ছেন না বা বোধগম্য হন না (উদা: ইনট -> ডাবল)। বেশিরভাগ আধুনিক ভাষায়, আপনি ডাবল> ইন করতে পারবেন না কারণ আপনি যথার্থতা হারাবেন। ধরণের জবরদস্তি সহ এটি কোনও "সমস্যা" নয়।
ম্যাক্সিমাম রৌলারের

4
এই উত্তরটি সিআইএল-এর ইকমা ৩৩৫-এ সংজ্ঞায়িত স্পেসিফিকেশনগুলির সাথে সামঞ্জস্য করে না। আমি আমার উত্তরে উদাহরণ সহ স্পেসিফিকেশন সংজ্ঞাটি রেখেছি।
পি.ব্রায়ান.ম্যাকি

24

ব্যবহারগুলি পৃথক, যেমন আপনি নোট করেছেন।

আমার ব্যক্তিগত ব্যবহারগুলি হ'ল:

  • একটি "কাস্ট" হ'ল একটি কাস্ট অপারেটরের ব্যবহার । একজন কাস্টার অপারেটর সংকলককে নির্দেশ দেয় যে হয় (1) এই অভিব্যক্তিটি প্রদত্ত ধরণের হিসাবে পরিচিত নয়, তবে আমি আপনাকে প্রতিশ্রুতি দিচ্ছি যে রানটাইমের সময় মানটি সেই ধরণের হবে; সংকলকটি প্রদত্ত প্রকারের মত প্রকাশ হিসাবে আচরণ করবে এবং রানটাইমটি ত্রুটি তৈরি করবে যদি তা না হয়, বা (২) এক্সপ্রেশনটি সম্পূর্ণ ভিন্নরূপে হয়, তবে উদাহরণগুলি সংযুক্ত করার জন্য একটি সুপরিচিত উপায় রয়েছে কাস্ট-টু টাইপের উদাহরণ সহ অভিব্যক্তির ধরণের। সংকলকটি রূপান্তর সম্পাদনকারী কোড উত্পন্ন করার জন্য নির্দেশিত। মনোযোগী পাঠক নোট করবেন যে এগুলি বিপরীত, যা আমি মনে করি একটি ঝরঝরে কৌশল।

  • একটি "রূপান্তর" একটি অপারেশন যার মাধ্যমে এক ধরণের মানকে অন্য ধরণের মান হিসাবে গণ্য করা হয় - সাধারণত একটি আলাদা ধরণের, যদিও "পরিচয় রূপান্তর" এখনও প্রযুক্তিগতভাবে বলতে হয় speaking রূপান্তরটি "প্রতিনিধিত্বমূলক পরিবর্তন" হতে পারে, যেমন int এর দ্বিগুণ, বা এটি "প্রতিনিধিত্ব সংরক্ষণ করা" হতে পারে বস্তুর স্ট্রিংয়ের মতো। রূপান্তরগুলি "অন্তর্নিহিত" হতে পারে, যার জন্য একটি কাস্টের প্রয়োজন হয় না বা "স্পষ্টত", যার জন্য কাস্ট প্রয়োজন হয় না।

  • একটি "জবরদস্তি" একটি প্রতিনিধিত্বমূলক-পরিবর্তনীয় অন্তর্নিহিত রূপান্তর।


4
আমি মনে করি এই উত্তরের প্রথম বাক্যটি সবচেয়ে গুরুত্বপূর্ণ বিষয়। বিভিন্ন ভাষা এই শব্দগুলি বেশ আলাদা জিনিস বোঝাতে ব্যবহার করে। উদাহরণস্বরূপ, হাস্কেল-তে "জবরদস্তি" কখনও উপস্থাপনা পরিবর্তন করে না ; একটি নিরাপদ জোর, Data.Coerce.coerce :: Coercible a b => a -> bএকই প্রতিনিধিত্ব আছে প্রমাণিত প্রকারের জন্য কাজ করে; Unsafe.Coerce.unsafeCoerce :: a -> bযে কোনও দুটি ধরণের জন্য কাজ করে (এবং যদি আপনি এটি ভুল ব্যবহার করেন তবে আপনার নাক থেকে ভূতদের বের করে আনবে)।
dfeuer

@ ডিফিউর আকর্ষণীয় তথ্য পয়েন্ট, ধন্যবাদ! আমি লক্ষ করি যে সি # স্পেস "জবরদস্তি" সংজ্ঞায়িত করে না; আমার পরামর্শটি আমি ব্যক্তিগতভাবে যা বোঝাতে চাইছি সেটাই। এই শব্দটি দুর্বল সংজ্ঞায়িত বলে মনে হচ্ছে, আমি সাধারণত এড়াতে পারি।
এরিক লিপার্ট

9

কাস্টিং হ'ল প্রক্রিয়া যার মাধ্যমে আপনি কোনও অবজেক্ট টাইপকে অন্য ধরণের হিসাবে বিবেচনা করেন, কোর্সিং একটি বস্তুকে অন্যটিতে রূপান্তর করছে।

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

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

উদাহরণ হিসাবে নিম্নলিখিত কোড বিবেচনা করুন:

class baseClass {}
class childClass : baseClass {}
class otherClass {}

public void doSomethingWithBase(baseClass item) {}

public void mainMethod()
{
    var obj1 = new baseClass();
    var obj2 = new childClass();
    var obj3 = new otherClass();

    doSomethingWithBase(obj1); //not a problem, obj1 is already of type baseClass
    doSomethingWithBase(obj2); //not a problem, obj2 is implicitly casted to baseClass
    doSomethingWithBase(obj3); //won't compile without additional code
}
  • obj1 কোনও anyালাই বা জোর দেওয়া (রূপান্তর) ছাড়াই পাস হয়েছে কারণ এটি ইতিমধ্যে একই ধরণের baseClass
  • জেজ 2 স্পষ্টভাবে বেসে কাস্ট করা হয় যার অর্থ একটি নতুন অবজেক্টের কোনও সৃষ্টি নেই কারণ ইতিমধ্যে 2 অ্যাজেক্ট 2 হতে পারে baseClass
  • obj3 চাহিদা বেস একরকম রূপান্তরিত করার জন্য, আপনার কাছ থেকে রূপান্তর করতে আপনার নিজের পদ্ধতি প্রদান করার প্রয়োজন হবে otherClassথেকে baseClass, কোন ধরনের baseClass একটি নতুন বস্তু তৈরি এবং obj3 থেকে তথ্য কপি করে এটি ভরাট জড়িত করা হবে।

একটি ভাল উদাহরণ রূপান্তর সি # শ্রেণি যেখানে এটি বিভিন্ন ধরণের মধ্যে রূপান্তর করতে কাস্টম কোড সরবরাহ করে।


4
একটি উদাহরণ আপনি যে পার্থক্যটি করার চেষ্টা করছেন তা স্পষ্ট করতে সহায়তা করবে।
অলিভার চার্লসওয়ার্থ

2

কাস্টিং বস্তুর প্রকার সংরক্ষণ করে। জোর করে না।

জবরদস্তি এমন একটি ধরণের মান নিচ্ছে যা অসমীকরণের সাথে সামঞ্জস্যপূর্ণ নয় এবং এমন একটি রূপকে রূপান্তর করে যা কার্যসূচি উপযুক্ত। এখানে আমি একটি জবরদস্তি সম্পাদন করি কারণ Int32উত্তরাধিকার সূত্রে প্রাপ্ত হয় না Int64... সুতরাং এটি নিয়োগের সাথে সামঞ্জস্যপূর্ণ নয়। এটি একটি প্রশস্তকরণ জবরদস্তি (কোনও ডেটা হারেনি)। একজন প্রসার বলপ্রয়োগ একটি অন্তর্নিহিত ওরফে হয় রূপান্তরএকটি জোর করে একটি রূপান্তর সম্পাদন করে।

void Main()
{
    System.Int32 a = 100;
    System.Int64 b = a;
    b.GetType();//The type is System.Int64.  
}

Ing ালাই আপনাকে কোনও প্রকারের সাথে এমন আচরণ করতে দেয় যেমন এটি প্রকার সংরক্ষণের সময় অন্যরকম ।

    void Main()
    {
        Derived d = new Derived();
        Base bb = d;
        //b.N();//INVALID.  Calls to the type Derived are not possible because bb is of type Base
        bb.GetType();//The type is Derived.  bb is still of type Derived despite not being able to call members of Test
    }

    class Base 
    {
        public void M() {}
    }

    class Derived: Base
    {
        public void N() {}
    }

উত্স: কমন ল্যাঙ্গুয়েজ অবকাঠামো অ্যানোটেটেড স্ট্যান্ডার্ড জেমস এস মিলার দ্বারা নির্ধারিত

এখন সবচেয়ে মজার বিষয় হ'ল কাস্টিং সম্পর্কে মাইক্রোসফ্টের ডকুমেন্টেশন কাস্টিংয়ের একমা -৩৩৫ স্পেসিফিকেশন সংজ্ঞা অনুসারে সামঞ্জস্য করে না।

সুস্পষ্ট রূপান্তর (ক্যাসেট): সুস্পষ্ট রূপান্তরগুলির জন্য একজন কাস্ট অপারেটর প্রয়োজন। রূপান্তরকরণে তথ্য হারিয়ে যেতে পারে বা যখন অন্য কারণে রূপান্তরটি সফল না হতে পারে তখন কাস্টিং প্রয়োজন। সাধারণ উদাহরণগুলির মধ্যে এমন একটি সংখ্যার রূপান্তর অন্তর্ভুক্ত থাকে যার মধ্যে কম নির্ভুলতা বা একটি ছোট পরিসীমা থাকে এবং একটি বেস-ক্লাসের উদাহরণটি উত্পন্ন শ্রেণিতে রূপান্তর করা হয়।

... এটি কর্রেশন না কাস্টিংয়ের মতো শোনাচ্ছে ।

উদাহরণ স্বরূপ,

  object o = 1;
  int i = (int)o;//Explicit conversions require a cast operator
  i.GetType();//The type has been explicitly converted to System.Int32.  Object type is not preserved.  This meets the definition of Coercion not casting.

কে জানে? মাইক্রোসফ্ট চেক করছে যে কেউ এই জিনিসগুলি পড়ে কিনা।


1

নীচে নিম্নলিখিত নিবন্ধ থেকে একটি পোস্ট করা হয়েছে :

জবরদস্তি এবং ingালাইয়ের মধ্যে পার্থক্য প্রায়শই উপেক্ষিত হয়। আমি দেখতে পাচ্ছি কেন; অনেক ভাষার উভয় ক্রিয়াকলাপের জন্য একই (বা অনুরূপ) বাক্য গঠন এবং পরিভাষা রয়েছে। কিছু ভাষা এমনকি কোনও রূপান্তরকে "ingালাই" হিসাবে উল্লেখ করতে পারে তবে নিম্নলিখিত ব্যাখ্যাটি সিটিএসের ধারণাগুলিকে বোঝায়।

আপনি যদি অন্য ধরণের কোনও স্থানে কোনও ধরণের মান নির্ধারণের চেষ্টা করছেন তবে আপনি নতুন ধরণের একটি মান উত্পন্ন করতে পারবেন যার মূলটির সাথে একই রকম অর্থ রয়েছে। এটা জবরদস্তি। জবরদস্তি আপনাকে কোনও নতুন মান তৈরি করে নতুন ধরণের ব্যবহার করতে দেয় যা কোনওভাবে মূলটির সাথে সাদৃশ্যপূর্ণ। কিছু জবরদস্তি ডেটা ফেলে দিতে পারে (উদাঃ 0x12345678 কে সংক্ষিপ্ত 0x5678 এ রূপান্তর করে), অন্যরা নাও করতে পারে (যেমন: 0x00000008 সংক্ষিপ্ত 0x0008 বা রূপান্তর 0x0000000000000008)।

মনে রাখবেন যে মানগুলির একাধিক প্রকার থাকতে পারে। যদি আপনার পরিস্থিতি কিছুটা পৃথক হয় এবং আপনি কেবলমাত্র মানের ধরণের একটি পৃথক নির্বাচন করতে চান তবে ingালাই কাজটির সরঞ্জাম। কাস্টিং সহজভাবে ইঙ্গিত দেয় যে আপনি কোনও নির্দিষ্ট ধরণের কোনও অপারেট করতে চান যা একটি মান অন্তর্ভুক্ত করে।

কোড স্তরে পার্থক্যটি সি # থেকে আইএল পর্যন্ত পরিবর্তিত হয়। সি # তে, কাস্টিং এবং জবরদস্তি উভয়ই মোটামুটি অনুরূপ:

static void ChangeTypes(int number, System.IO.Stream stream)
{
    long longNumber = number;
    short shortNumber = (short)number;

    IDisposable disposableStream = stream;
    System.IO.FileStream fileStream = (System.IO.FileStream)stream;
}

আইএল স্তরে এগুলি একেবারেই আলাদা:

ldarg.0
 conv.i8
 stloc.0

ldarg.0
 conv.i2
 stloc.1


ldarg.1
 stloc.2

ldarg.1
 castclass [mscorlib]System.IO.FileStream
 stloc.3

যৌক্তিক স্তরের ক্ষেত্রে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। সবচেয়ে গুরুত্বপূর্ণ যেটি মনে রাখতে হবে তা হ'ল জবরদস্তি একটি নতুন মান তৈরি করে while আসল মান এবং কাস্টিংয়ের পরে মানটির পরিচয় একই হয়, তবে জোরালো মানের পরিচয় মূল মান থেকে পৃথক হয়; জালিয়াতি একটি নতুন, স্বতন্ত্র উদাহরণ তৈরি করে, যখন ingালাই করে না। একটি ছদ্মবেশটি হ'ল andালাইয়ের ফলাফল এবং মূলটি সর্বদা সমান (উভয়ই পরিচয় এবং সমতা উভয়ই), তবে একটি জোরালো মান মূলটির সাথে সমান হতে পারে বা নাও হতে পারে এবং কখনই আসল পরিচয়টি ভাগ করে না।

উপরের উদাহরণগুলিতে জবরদস্তির প্রভাবগুলি সহজেই দেখতে পাওয়া যায়, কারণ সংখ্যার প্রকারগুলি সর্বদা মান দ্বারা অনুলিপি করা হয়। আপনি যখন রেফারেন্স প্রকারের সাথে কাজ করছেন তখন জিনিসগুলি কিছুটা কৌশলযুক্ত হয়।

class Name : Tuple<string, string>
{
    public Name(string first, string last)
        : base(first, last)
    {
    }

    public static implicit operator string[](Name name)
    {
        return new string[] { name.Item1, name.Item2 };
    }
}

নীচের উদাহরণে, একটি রূপান্তর একটি castালাই, অন্যটি জবরদস্তি।

Tuple<string, string> tuple = name;
string[] strings = name;

এই রূপান্তরগুলির পরে, টিপল এবং নাম সমান, তবে স্ট্রিংগুলি তাদের উভয়ের সাথে সমান নয়। নাম এবং স্ট্রিংয়ের তুলনা করার জন্য নাম শ্রেণিতে সমান () এবং অপারেটর == () প্রয়োগ করে আপনি পরিস্থিতিটি কিছুটা ভাল (বা কিছুটা বিভ্রান্তিকর) করতে পারেন। এই অপারেটরগুলি তুলনা সমস্যাটি "ঠিক" করবে, তবে আপনার এখনও দুটি পৃথক দৃষ্টান্ত থাকবে; স্ট্রিংগুলিতে কোনও পরিবর্তন নাম বা টিউপলে প্রতিফলিত হবে না, অন্যদিকে নাম বা টুপলের যে কোনও একটিতে নাম এবং টিপল প্রতিফলিত হবে তবে স্ট্রিংগুলিতে নয়।

যদিও উপরের উদাহরণটি castালাই এবং জবরদস্তির মধ্যে কিছু পার্থক্য বোঝানোর জন্য বোঝানো হয়েছিল, এটি সি # তে রেফারেন্স টাইপের সাথে রূপান্তর অপারেটরদের ব্যবহার সম্পর্কে কেন আপনাকে অত্যন্ত সতর্ক হওয়া উচিত তার একটি দুর্দান্ত উদাহরণ হিসাবে কাজ করে।


1

থেকে CLI মান :

I.8.3.2 জবরদস্তি

কখনও কখনও এমন কোনও ধরণের মান নেওয়া বাঞ্ছনীয় যা কোনও স্থানে বরাদ্দযোগ্য নয়, এবং মানকে এমন এক ধরণের রূপান্তর করে যা লোকেশনের ধরণে নির্ধারিত হয়। এটি মান জোরের মাধ্যমে সম্পন্ন হয়। জবরদস্তি একটি নির্দিষ্ট ধরণের এবং একটি পছন্দসই ধরণের একটি মান নেয় এবং পছন্দসই ধরণের একটি মূল তৈরির চেষ্টা করে যার মূল মানের সাথে সমান অর্থ হয়। জবরদস্তি প্রতিনিধিত্বমূলক পরিবর্তনের পাশাপাশি টাইপ পরিবর্তনেরও ফলস্বরূপ; অতএব জবরদস্তি অবজেক্টের পরিচয় সংরক্ষণ করে না।

দুটি ধরণের জবরদস্তি রয়েছে: প্রস্থকরণ , যা কখনই তথ্য হারায় না এবং সংকীর্ণ হয় , যাতে তথ্য হারিয়ে যেতে পারে। একটি বিস্তৃত জবরদস্তির একটি উদাহরণ এমন একটি মানকে চাপিয়ে দিবে যা একটি 32-বিট স্বাক্ষরিত পূর্ণসংখ্য যা একটি 64-বিট স্বাক্ষরিত পূর্ণসংখ্যা হয়। সংকীর্ণ জবরদস্তির একটি উদাহরণ হ'ল বিপরীত: 32-বিট স্বাক্ষরিত পূর্ণসংখ্যায় 64-বিট স্বাক্ষরিত পূর্ণসংখ্যাকে জোর দেওয়া। প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি প্রায়শই বিস্তৃত জবরদৃশ্যগুলিকে অন্তর্নিহিত রূপান্তর হিসাবে প্রয়োগ করে , অন্যদিকে সংকীর্ণ জবরদৃশগুলিতে সাধারণত একটি স্পষ্ট রূপান্তর প্রয়োজন

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

I.8.3.3 কাস্টিং

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

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


1

উইকিপিডিয়া অনুসারে,

কম্পিউটার সায়েন্সে টাইপ রূপান্তর, টাইপ কাস্টিং, টাইপ জবরদস্তি এবং টাইপ জাগলিং হ'ল এক ডাটা টাইপ থেকে অন্য ডেটাতে এক্সপ্রেশন পরিবর্তনের বিভিন্ন উপায়।

টাইপ কাস্টিং এবং টাইপ জবরদস্তির মধ্যে পার্থক্য নিম্নরূপ:

           TYPE CASTING           |                   TYPE COERCION
                                  |
1. Explicit i.e., done by user    | 1. Implicit i.e., done by the compiler
                                  |
2. Types:                         | 2. Type:
    Static (done at compile time) |     Widening (conversion to higher data 
                                  |     type)
    Dynamic (done at run time)    |     Narrowing (conversion to lower data 
                                  |     type)
                                  |
3. Casting never changes the      | 3. Coercion can result in representation 
   the actual type of object      |    as well as type change.
   nor representation.            |

দ্রষ্টব্য : ingালাই রূপান্তর নয়। এটি কেবলমাত্র একটি প্রক্রিয়া যার মাধ্যমে আমরা কোনও বস্তুর প্রকারকে অন্য ধরণের হিসাবে বিবেচনা করি। অতএব, কাস্টিংয়ের সময় প্রকৃত ধরণের অবজেক্টের পাশাপাশি উপস্থাপনাও পরিবর্তিত হয় না।

আমি @ পেড্রোসি ৮ এর কথার সাথে একমত:

অন্যদিকে, জোর করে বোঝানো নতুন ধরণের স্মৃতিতে একটি নতুন অবজেক্ট তৈরি করা বোঝায় এবং তারপরে মূল টাইপটি নতুনটির সাথে অনুলিপি হয়ে যায়, উভয় বস্তুকে স্মৃতিতে রেখে যায় (যতক্ষণ না আবর্জনা সংগ্রহকারীরা উভয় দূরে সরিয়ে নিয়ে যায়) বা উভয়ই) ।

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