আমি কয়েকটি উদাহরণ সি # কোডের দিকে চেয়ে ছিলাম এবং লক্ষ্য করেছি যে একটি উদাহরণ () এর মধ্যে রিটার্নটি জড়িয়ে রেখেছে।
আমি সর্বদা সবেমাত্র করেছি:
return myRV;
কি পার্থক্য আছে:
return (myRV);
উত্তর:
আপডেট: 12 এপ্রিল 2010 এ এই প্রশ্নটি আমার ব্লগের বিষয় ছিল । মজাদার প্রশ্নের জন্য ধন্যবাদ!
অনুশীলনে, কোনও পার্থক্য নেই।
ইন তত্ত্ব একটি পার্থক্য আছে হতে পারে। সি # স্পেসিফিকেশনে তিনটি আকর্ষণীয় পয়েন্ট রয়েছে যেখানে এটি একটি পার্থক্য উপস্থাপন করতে পারে।
প্রথমে, নাম এবং ধরণের গাছের প্রতিনিধিগুলিতে বেনামে ফাংশন রূপান্তর। নিম্নোক্ত বিবেচনা কর:
Func<int> F1() { return ()=>1; }
Func<int> F2() { return (()=>1); }
F1
স্পষ্টত আইনী। হয় F2
? প্রযুক্তিগতভাবে, না। অনুমানটি 6.5 বিভাগে বলেছে যে ল্যাম্বডা এক্সপ্রেশন থেকে একটি সামঞ্জস্যপূর্ণ প্রতিনিধি প্রকারে রূপান্তর আছে । এটা কি ল্যাম্বডা এক্সপ্রেশন ? না। এটি একটি প্রথম বন্ধনীযুক্ত প্রকাশ যা একটি ল্যাম্বডা এক্সপ্রেশন ধারণ করে ।
ভিজ্যুয়াল সি # সংকলকটি এখানে একটি ছোট্ট স্পেস লঙ্ঘন করে এবং আপনার জন্য প্রথম বন্ধনী বাতিল করে।
দ্বিতীয়:
int M() { return 1; }
Func<int> F3() { return M; }
Func<int> F4() { return (M); }
F3
আইনী হয় F4
? নং বিভাগ .5.৫.৩ বলেছে যে একটি প্রথম বন্ধনীযুক্ত এক্সপ্রেশনটিতে কোনও পদ্ধতি গ্রুপ থাকতে পারে না। আবার আপনার সুবিধার জন্য আমরা স্পেসিফিকেশন লঙ্ঘন করি এবং রূপান্তরকে অনুমতি দেব।
তৃতীয়:
enum E { None }
E F5() { return 0; }
E F6() { return (0); }
F5
আইনী হয় F6
? নং অনুচ্ছেদে বলা হয়েছে যে আক্ষরিক শূন্য থেকে কোনও গণিতের ধরণের রূপান্তর আছে। " (0)
" আক্ষরিক শূন্য নয়, এটি একটি বন্ধনী যা পরে আক্ষরিক শূন্য এবং তার পরে একটি প্রথম বন্ধনী হয়। আমরা এখানে স্পেসিফিকেশন লঙ্ঘন করেছি এবং বাস্তবে যে কোনও সংকলন সময় ধ্রুবক অভিব্যক্তি শূন্যের সমান , এবং কেবল আক্ষরিক শূন্য নয় allow
সুতরাং প্রতিটি ক্ষেত্রেই, আমরা আপনাকে এটি থেকে দূরে সরে যেতে অনুমতি দিই, যদিও প্রযুক্তিগতভাবে এটি করা অবৈধ।
কোণার কেসগুলি রয়েছে যখন বন্ধনীর উপস্থিতি প্রোগ্রামের আচরণে প্রভাব ফেলতে পারে:
ঘ।
using System;
class A
{
static void Foo(string x, Action<Action> y) { Console.WriteLine(1); }
static void Foo(object x, Func<Func<int>, int> y) { Console.WriteLine(2); }
static void Main()
{
Foo(null, x => x()); // Prints 1
Foo(null, x => (x())); // Prints 2
}
}
ঘ।
using System;
class A
{
public A Select(Func<A, A> f)
{
Console.WriteLine(1);
return new A();
}
public A Where(Func<A, bool> f)
{
return new A();
}
static void Main()
{
object x;
x = from y in new A() where true select (y); // Prints 1
x = from y in new A() where true select y; // Prints nothing
}
}
ঘ।
using System;
class Program
{
static void Main()
{
Bar(x => (x).Foo(), ""); // Prints 1
Bar(x => ((x).Foo)(), ""); // Prints 2
}
static void Bar(Action<C<int>> x, string y) { Console.WriteLine(1); }
static void Bar(Action<C<Action>> x, object y) { Console.WriteLine(2); }
}
static class B
{
public static void Foo(this object x) { }
}
class C<T>
{
public T Foo;
}
আশা করি আপনি বাস্তবে এটি কখনই দেখতে পাবেন না।
এর মতো প্রশ্নের উত্তর দেওয়ার একটি ভাল উপায় হ'ল রিফ্লেক্টর ব্যবহার এবং আইএল কী উত্পন্ন হয় তা দেখুন। সংকলন সংশোধন করে আপনি সংকলক অপ্টিমাইজেশান এবং এ সম্পর্কে অনেক কিছু শিখতে পারেন।