মূলশব্দ হিসাবে এবং এর মধ্যে পার্থক্য


121

দয়া করে সি # তে কীওয়ার্ড isএবং asকীওয়ার্ডের মধ্যে পার্থক্য রয়েছে তা বলুন


7
যেমন আছে তেমনি আছে নাকি? ব্লগস.এমএসডিএন
এরিক্লিপার্ট /

3
আপনি যদি এই বিষয়ে আগ্রহী হন তবে আপনি সম্ভবত এটিও জানতে চান যে "হিসাবে" এবং "কাস্ট" অপারেটরগুলির মধ্যে পার্থক্য কী: ব্লগস.এমএসএনএন
এরিক লিপার্ট

7
আপনি উত্তর গৃহীত চিহ্নিত করতে চান? এটি অন্যদের অনুরূপ উত্তর খুঁজতে সহায়তা করবে।
KMån

উত্তর:


151

হয়

isঅপারেটর চেক একটি বস্তু একটি নির্দিষ্ট ধরনের কাস্ট করা যাবে যদি।

উদাহরণ:

if (someObject is StringBuilder) ...

যেমন

asঅপারেটর প্রচেষ্টা একটি নির্দিষ্ট ধরনের একটি বস্তু কাস্ট করার জন্য এবং আয় নাল তা করতে ব্যর্থ হলে।

উদাহরণ:

StringBuilder b = someObject as StringBuilder;
if (b != null) ...

সম্পর্কিত:

ঢালাই

ঢালাই অপারেটর প্রচেষ্টা একটি নির্দিষ্ট ধরনের একটি বস্তু নিক্ষেপ, এবং একটি ব্যাতিক্রম ছোঁড়ার তা করতে ব্যর্থ হলে হয়।

উদাহরণ:

StringBuilder b = (StringBuilder)someObject.

4
এটি সঠিক নয়। isকোনও বস্তুকে নির্দিষ্ট ধরণের কাস্ট করা যেতে পারে কিনা তা পরীক্ষা করে না। একটি পূর্ণসংখ্যা লম্বা জরিমানা করে তবে 10 is longএটি মিথ্যা।
মার্টিন স্মিথ

9
@ মার্টিনস্মিত: আপনি castালাইয়ের সাথে টাইপ রূপান্তর মিশ্রিত করছেন। একটি পূর্ণসংখ্যাকে দীর্ঘতে রূপান্তর করা যায় তবে এটি দীর্ঘ হয় না কারণ এটি দীর্ঘ হয় না।
গুফা

2
আপনি আমাকে বলছেন যে একটি পূর্ণসংখ্যার দীর্ঘ জন্য কাস্ট করা যাবে না? তা (long)some_integerকি ব্যর্থ হবে? আমি নিশ্চিত যে আমরা দুজনেই জানি এটি চালানো ছাড়াও সত্য নয় তাই দয়া করে আপনার অর্থটি কী তা ব্যাখ্যা করুন।
মার্টিন স্মিথ

12
@ মার্টিনস্মিত: আপনি এখনও রূপান্তরের সাথে কাস্টিং বিভ্রান্ত করছেন। আপনি একটি পূর্ণসংখ্যার দীর্ঘকে কাস্ট করছেন না, আপনি একটি পূর্ণসংখ্যাকে দীর্ঘকে রূপান্তর করছেন। যদিও তারা একই বাক্য গঠন ব্যবহার করে তবে উল্লেখগুলি কাস্ট করা হয় এবং মানগুলি রূপান্তরিত হয়।
গুফা

2
নোট সম্পর্কেis : " লক্ষ্য করুন নেই । অপারেটর শুধুমাত্র রেফারেন্সের ধর্মান্তর, বক্সিং ধর্মান্তর এবং আনবক্সিং ধর্মান্তর বিবেচনায় এমন ব্যবহারকারী-সংজ্ঞায়িত ধর্মান্তর, বিবেচনা করা হয় না অন্যান্য ধর্মান্তর। " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx)। আমাদের সম্পর্কেas : " লক্ষ্য করুন যেমন ।। অপারেটর সঞ্চালিত শুধুমাত্র রেফারেন্সের ধর্মান্তর, nullable ধর্মান্তর এবং বক্সিং ধর্মান্তর অপারেটর যেমন ব্যবহারকারী-সংজ্ঞায়িত ধর্মান্তর, যা পরিবর্তে ঢালাই এক্সপ্রেশন ব্যবহার করে সম্পাদনা করা উচিত হিসাবে অন্যান্য ধর্মান্তর, সঞ্চালন করা সম্ভব নয় যেমন " ( MSDN .microsoft.com / en-us / গ্রন্থাগার / cscsdfbt.aspx )
ব্যবহারকারী 1234567

33

আইএস এবং এর মধ্যে পার্থক্যটি হ'ল ..

IS - ইস অপারেটর একটি প্রদত্ত প্রকারের সাথে কোনও সামগ্রীর সামঞ্জস্যতা পরীক্ষা করতে ব্যবহৃত হয় এবং এটি ফলাফলটি বুলিয়ান (সত্য বা মিথ্যা) হিসাবে প্রদান করে।

আঃ - যেমন অপারেটর কোনও প্রদত্ত প্রকার বা একটি শ্রেণিতে অবজেক্ট কাস্টিংয়ের জন্য ব্যবহৃত হয়।

যাত্রা।

Student s = obj as Student;

সমান:

Student s = obj is Student ? (Student)obj : (Student)null;

1
সমতা সুস্পষ্টভাবে দেখায় যে দুজনের মধ্যে কোনটি বেশি আদিম এবং মার্জিতভাবে তাদের সম্পর্কের নীচে অন্তর্ভুক্ত! সমতা জন্য ধন্যবাদ!
মুসা আল-হাসি

1
@ মুসাআল-ঝামেলা প্রকৃতপক্ষে এটি এটি দেখায় না যেটি আরও আদিম। isপ্রকাশ করা যেতে পারে asএবং সাথে প্রকাশ করা asযেতে পারে is। কীওয়ার্ড isদিয়ে কীভাবে তৈরি করবেন তা এখানে Here : সমতূল্য এই বিষয়ে আরও এখানেasBool b = obj is Student;Bool b = (obj as Student) != null;
অ্যালেক্স Telon

8

উভয় isএবংas কীওয়ার্ড সি # তে টাইপ কাস্টিংয়ের জন্য ব্যবহৃত হয়।

আপনি উভয় কীওয়ার্ডের ব্যবহারের আইএল কোডটি একবার দেখে নিলে আপনি সহজেই পার্থক্যটি পেয়ে যাবেন।

সি # কোড:

BaseClass baseclassInstance = new DerivedClass();
DerivedClass derivedclassInstance;

if (baseclassInstance is DerivedClass)
{
   derivedclassInstance = (DerivedClass)baseclassInstance;
   // do something on derivedclassInstance
}


derivedclassInstance = baseclassInstance as DerivedClass;

if (derivedclassInstance != null)
{
   // do something on derivedclassInstance
}

আইএল কোড (উপরের সি # কোডের জন্য সংযুক্ত চিত্রটিতে রয়েছে):

উপরের সি # কোডের জন্য আইএল কোড জন্য আইএল কোড isশব্দ ব্যবহার আইএল নির্দেশাবলী উভয় রয়েছে isinstaএবং castclass
তবে asকীওয়ার্ড ব্যবহারের জন্য আইএল কোডটি কেবলমাত্র isinsta

উপরে বর্ণিত ব্যবহারে, দুটি টাইপকাস্ট ঘটবে যেখানে isকীওয়ার্ড ব্যবহৃত হয় এবং কেবলমাত্র একটি টাইপকাস্ট যেখানে asকীওয়ার্ড ব্যবহৃত হয়।

দ্রষ্টব্য: আপনি যদি isকিছু শর্ত পরীক্ষা করতে কীওয়ার্ড ব্যবহার করে থাকেন এবং টাইপকাস্টের ফলাফলটিতে কোনও আগ্রহ না রাখেন তবে কেবলমাত্র একটি টাইপকাস্ট থাকবে, যেমন

if (baseclassInstance is DerivedClass)
{
   // do something based on the condition check.
}

isএবং asকীওয়ার্ডগুলি প্রয়োজনীয়তার ভিত্তিতে ব্যবহৃত হবে।


6

মূলশব্দটি এটির বাম পাশের মানটি ডান পাশে টাইপের একটি উদাহরণ কিনা তা যাচাই করে। উদাহরণ স্বরূপ:

if(obj is string)
{
     ...
}

মনে রাখবেন যে এই ক্ষেত্রে স্ট্রিং হিসাবে আপত্তি পেতে আপনাকে একটি অতিরিক্ত স্পষ্ট কাস্ট ব্যবহার করতে হবে।

মূলশব্দ হিসাবে ব্যবহারযোগ্য ক্ষুদ্র প্রকারের কাস্ট করতে ব্যবহৃত হয়। যদি নির্দিষ্ট মান নির্দিষ্ট প্রকারের উদাহরণ না হয় তবে নালটি ফিরে আসে। উদাহরণ স্বরূপ:

string str = obj as string;
if(str != null)
{
     ...
}

"1 হিসাবে কীওয়ার্ডটি বাতিলযোগ্য প্রকারের জন্য।
ব্যবহারকারী 2330678

3

আমি বলব: এমএসডিএন অনলাইনে পড়ুন, তবে এটি এখানে:

অপারেটরটি কোনও বস্তুর প্রদত্ত প্রকারের সাথে সামঞ্জস্যপূর্ণ কিনা তা যাচাই করে এবং মূল্যায়নের ফলাফলটি বুলিয়ান: সত্য বা মিথ্যা।

অপারেটর হিসাবে কখনও কখনও একটি ব্যতিক্রম ছুঁড়ে না।


"হিসাবে" অপারেটর কোনও ব্যতিক্রম ছুঁড়ে ফেলবে না, এটি কেবল শূন্য হবে return
পিন্টে দানি

'হ'ল' এবং 'হিসাবে' সম্পর্কিত টাইপগুলি স্থির করে দিয়েছিলেন
প্যাট্রিক পিটারস

2

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

যেমন একটি castালাই। এটির সাহায্যে আমরা কর্মক্ষমতা অর্জন করি এবং কোনও কাস্ট অবৈধ হলে ব্যতিক্রমগুলি এড়াতে পারি। কাস্ট অসম্ভব হলে নাল ফিরিয়ে দেওয়া হয়। রেফারেন্স ধরণের জন্য, কাস্টের প্রস্তাব দেওয়া হয়। এটি উভয়ই দ্রুত এবং নিরাপদ is এটি অতিরিক্ত ক্যাসেটগুলি বাদ দেয়


2
  1. অপারেটরটি সত্য বা মিথ্যা ভিত্তিতে ফলাফলটি প্রদত্ত প্রকারের সাথে সামঞ্জস্যপূর্ণ কিনা তা যাচাই করে।
  2. যেমন এক প্রকারকে অন্য প্রকারে castালতে ব্যবহৃত হয় এবং রূপান্তর ব্যর্থতার ফলাফল ব্যতীত বাদ দেওয়া বাদ দেয়। উদাহরণগুলির সাথে আরও ভাল বোঝার জন্য ভালভাবে লিঙ্কটি দেখুন https://blogs.msdn.microsoft.com/prakasht/2013/04/23/differences-between-direct-casting-is-and-as-operator-in-c/

2

অপারেটর যদি সত্য হয় বস্তুর একই ধরনের এবং মিথ্যা যদি নয়: দ্য C # অপারেটর বস্তুর প্রকার চেক করতে ব্যবহার করা হয় এবং এটি একটি bool মান হয়। অথবা কোনও "অবজেক্ট" অপারেটর কোনও অবজেক্টের রান-টাইম টাইপ কোনও প্রদত্ত টাইপের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করতে ব্যবহৃত হয়। নাল বস্তুর জন্য এটি মিথ্যা উদাহরণ দেয়

if(obj is AnimalObject)
{
 //Then Work
}

অপারেটর হিসাবে

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

যেমন

Type obj = Object as Type;

ওভার ওভারের সুবিধা হ'ল অপারেটর ক্ষেত্রে, castালাই টাইপ করার জন্য, আমাদের দুটি পদক্ষেপ করা দরকার:

Check the Type using is
If its true then Type cast

প্রকৃতপক্ষে এটি প্রতিটি সময় থেকেই সিএলআর উত্তরাধিকারক্রমক্রমের মধ্য দিয়ে যাবে এবং প্রতিটি ধরণের নির্দিষ্ট ধরণের বিপরীতে পরীক্ষা করবে।

এটি এড়াতে, হিসাবে এটি ব্যবহার করুন, এটি এক ধাপে এটি করবে। কেবল প্রকারটি পরীক্ষা করার জন্য আমরা হ'ল অপারেটরটি ব্যবহার করব।


ইতিমধ্যে প্রচুর বৈধ উত্তর রয়েছে এমন 8 বছরের পুরানো প্রশ্নের উত্তর দেওয়া স্ট্যাক ওভারফ্লো ব্যবহারের সেরা উপায় নয়।
ক্লজ জর্জেনসেন

1

অপারেটর যেমন কাস্টের অনুরূপ তবে ব্যর্থ হলে ব্যতিক্রমের পরিবর্তে নাল ফেরায়।

এবং আইজ অপারেটরটি একটি বস্তুর নির্দিষ্ট ধরণের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করতে ব্যবহৃত হয়। এটি সাধারণত যদি বিবৃতিতে ব্যবহৃত হয়।


1

is: অপারেটরটি কোনও অবজেক্টের রান-টাইম টাইপ কোনও প্রদত্ত টাইপের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করতে ব্যবহৃত হয়

as: অপারেটর হিসাবে সামঞ্জস্যপূর্ণ ধরণের মধ্যে রূপান্তর করতে ব্যবহৃত হয়।

object s = "this is a test";
string str=string.Empty;
if( s is string)
    str = s as string;

2
আপনার উত্তরটি সঠিক, তবে আপনার নমুনা কোডটি একটি অ্যান্টি-প্যাটার্ন। এটা করতে ব্যয়বহুল isতারপর as: এটা দুইবার unboxes। রেফারেন্স ধরণের জন্য, আপনার ঠিক করা উচিত as, তারপরে এটি কাজ করে কিনা তা দেখতে নাল পরীক্ষা করুন।
স্টিভেন সুদিত

1

নীচের ইউটিউব ভিডিওটি দেখুন যা আরও বেশি প্রদর্শনমূলক এবং চাক্ষুষ উপায়ে পার্থক্যটি ব্যাখ্যা করে:

https://www.youtube.com/watch?v=IKmRtJcRX_I

নীচে কোড ব্যাখ্যা সহ দীর্ঘ উত্তর যায় goes

"IS" কীওয়ার্ডটি কোনও ধরণের সাথে বস্তুর সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করতে দরকারী useful উদাহরণস্বরূপ নীচের কোডে আমরা পরীক্ষা করছি যে "অস্ট" অবজেক্টটি একধরণের "গ্রাহক" শ্রেণি কিনা।

object ocust = new Customer();

if (ocust is Customer)
{ 

"AS" কীওয়ার্ডটি এক ধরণের থেকে অন্য ধরণের রূপান্তর করতে সহায়তা করে। উদাহরণস্বরূপ নীচের কোডে আমরা বস্তুকে একটি স্ট্রিং ডেটা ধরণে রূপান্তর করছি। যদি "এএস" কীওয়ার্ডটি কাস্ট টাইপ করতে সক্ষম না হয় তবে এটি নাল ফেরায়।

object o = "somestring";
string str = o as string;

1
MyClass myObject = (MyClass) obj;

বনাম

MyClass myObject = obj as MyClass;

দ্বিতীয় ক্লাস কাস্ট ব্যতিক্রম ছুঁড়ে ফেলার পরিবর্তে যদি আপত্তি কোনও মাইক্লাস না হয় তবে দ্বিতীয়টি বাতিল হবে।

শুধুমাত্র সত্য বা মিথ্যা ফিরে আসবে


1

আইএস এবং এএস উভয়ই সেফ টাইপ কাস্টিংয়ের জন্য ব্যবহৃত হয়

আইএস কীওয়ার্ড -> কোনও প্রদত্ত বস্তুর প্রকারটি নতুন অবজেক্টের ধরণের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করে। এটি কখনই ব্যতিক্রম ছুঁড়ে না ফেলে। এটি একটি বুলিয়ান ধরণের..প্রত্যক্ষ বা মিথ্যা পুনরুদ্ধার করে

`student stud = new student(){}
if(stud is student){} // It returns true // let say boys as derived class
if(stud is boys){}// It returns false since stud is not boys type
 //this returns true when,
student stud = new boys() // this return true for both if conditions.`

এএস কীওয়ার্ড: প্রদত্ত বস্তুর প্রকারটি নতুন অবজেক্টের ধরণের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করে। প্রদত্ত বস্তুটি নতুনের সাথে সামঞ্জস্যপূর্ণ হলে এটি নন-নাল ফেরায়, অন্যথায় নাল .. এটি একটি ব্যতিক্রম ছোঁড়ে।

`student stud = new student(){}
 // let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud = new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`

1

উভয় অপারেটর নিরাপদ প্রকারের ingালাইয়ের জন্য ব্যবহৃত হয়।

এএস অপারেটর:

এএস অপারেটরটি কোনও প্রদত্ত বস্তুর প্রকারটি নতুন অবজেক্টের ধরণের সাথে সামঞ্জস্যপূর্ণ কিনা তাও পরীক্ষা করে। এই কীওয়ার্ডটি কোনও প্রদত্ত বস্তুর প্রকারটি নতুন অবজেক্টের ধরণের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করবে will যদি এটি নতুনটির সাথে সামঞ্জস্য না করে তবে এটি NULL ফিরিয়ে দেবে।

আইএস অপারেটর:

এই অপারেটরটি পরীক্ষা করে দেখা যায় যে কোনও বস্তুর প্রকারটি নতুন বস্তুর সাথে সামঞ্জস্যপূর্ণ কিনা। যদি এটি সামঞ্জস্য হয় তবে তা সত্য হয় অন্যথায় মিথ্যা।


আপনি কি মনে করেন না যে এটি 4 বছরের মতো একটু বেশি দেরী হয়েছে?
সোনার গনোল

ওহ হ্যাঁ ... দুঃখিত .... আমি স্ট্যাকওভারফ্লোতে নতুন তাই সামান্য বাইরে বেরিয়ে এসেছি ... পোস্টের তারিখটি খেয়াল করেনি ...
টুকরাম

একটি অবদান একটি অবদান! "নিরাপদ টাইপকাস্টিং" কীওয়ার্ডগুলি নির্দেশ করার জন্য ধন্যবাদ! :-)
মূসা আল-হাসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.