এমএসআইএলে আপনি কী করতে পারেন যা আপনি সি # বা ভিবি.এনইটি তে করতে পারবেন না? [বন্ধ]


165

.NET ভাষায় লিখিত সমস্ত কোড এমএসআইএলকে সংকলিত করে, তবে এমন কোনও নির্দিষ্ট কাজ / ক্রিয়াকলাপ রয়েছে যা আপনি কেবলমাত্র এমএসআইএলকে সরাসরি ব্যবহার করতে পারবেন?

আসুন আমরা MS # তে সি #, ভিবি.এনইটি, এফ #, জ # বা অন্য কোনও নেট নেট ভাষার চেয়েও সহজ কাজ করেছি।

এখন পর্যন্ত আমাদের এটি আছে:

  1. লেজ পুনরাবৃত্তি
  2. জেনেরিক কো / বিপর্যয়
  3. ওভারলোডগুলি যা কেবল রিটার্নের ধরণের মধ্যে পৃথক হয়
  4. অ্যাক্সেস পরিবর্তনকারীগুলিকে ওভাররাইড করুন
  5. সিস্টেম.অবজেক্ট থেকে উত্তরাধিকারী হতে পারে না এমন একটি শ্রেণী রয়েছে
  6. ফিল্টার করা ব্যতিক্রম (vb.net এ করা যেতে পারে)
  7. বর্তমান স্ট্যাটিক শ্রেণীর ধরণের ভার্চুয়াল পদ্ধতিতে কল করা।
  8. একটি মান ধরণের বাক্সিত সংস্করণে একটি হ্যান্ডেল পান।
  9. একটি চেষ্টা / দোষ করুন।
  10. নিষিদ্ধ নামের ব্যবহার।
  11. মান ধরণের জন্য আপনার নিজস্ব প্যারামিটারলেস কনস্ট্রাক্টর সংজ্ঞায়িত করুন
  12. একটি raiseউপাদান সহ ইভেন্টগুলি সংজ্ঞায়িত করুন ।
  13. কিছু রূপান্তর সিএলআর দ্বারা অনুমোদিত কিন্তু সি # দ্বারা নয়।
  14. main()হিসাবে একটি নন পদ্ধতি তৈরি করুন .entrypoint
  15. দেশী intএবং নেটিভ unsigned intপ্রকারের সাথে সরাসরি কাজ করুন।
  16. ক্ষণস্থায়ী পয়েন্টারগুলির সাথে খেলুন
  17. মেথডোডিআইটিমে এমিটবাইটের নির্দেশিকা
  18. নন সিস্টেম নিক্ষেপ করুন এবং ধারণার ধরণ
  19. উত্তরাধিকারী এনামস (যাচাই করা হয়নি)
  20. আপনি বাইটের অ্যারেটিকে ইনটসের (4x ছোট) অ্যারে হিসাবে আচরণ করতে পারেন।
  21. আপনার কোনও ক্ষেত্র / পদ্ধতি / সম্পত্তি / ইভেন্ট থাকতে পারে সবার একই নাম (যাচাই করা হয়নি)।
  22. আপনি তার নিজের ক্যাচ ব্লক থেকে আবার চেষ্টা করে ব্লক করতে পারেন।
  23. আপনি famandassem এক্সেস সুনির্দিষ্টভাবে উল্লেখ করা এক্সেস আছে ( protected internalFam হয় বা assem)
  24. <Module>গ্লোবাল ফাংশন বা মডিউল প্রাথমিককরণ সংজ্ঞায়নের জন্য শ্রেণিতে সরাসরি অ্যাক্সেস ।

17
দুর্দান্ত প্রশ্ন!
তমাস সিজনে

5
এফ # লেজ পুনরাবৃত্তিটি সমর্থন করে: en.wikibooks.org/wiki/F_Sharp_Programming/Recursion
বাস বোসিংক

4
উত্তরাধিকারী enums? এটি কখনও কখনও খুব সুন্দর হবে ..
জিমি হোফা

1
মূল পদ্ধতির .NET
কংক্রিট গণেট

4
"অ-গঠনমূলক হিসাবে বন্ধ" দাবিটি অযৌক্তিক। এটি একটি অভিজ্ঞতামূলক প্রশ্ন।
জিম বাল্টার

উত্তর:


34

এমএসআইএল ওভারলোডগুলির জন্য অনুমতি দেয় যা কেবলমাত্র রিটার্নের ধরণের কারণে আলাদা

call void [mscorlib]System.Console::Write(string)

অথবা

callvirt int32 ...

5
আপনি কিভাবে এই ধরনের জিনিস জানেন? :)
গেরি শেনেক


8
এটা সত্যিই দারুন. রিটার্ন ওভারলোডগুলি কে করতে চায়নি?
জিমি হোফা

12
যদি রিটার্ন টাইপ ব্যতীত দুটি পদ্ধতি একরকম হয় তবে হয় সি # বা ভিবি নেট থেকে কল করা যেতে পারে?
সুপারক্যাট

29

বেশিরভাগ। নেট ভাষা সি # এবং ভিবি সহ এমএসআইএল কোডের লেজ পুনরাবৃত্তি বৈশিষ্ট্যটি ব্যবহার করে না।

টেল রিকার্সন একটি অপ্টিমাইজেশন যা কার্যকরী ভাষায় সাধারণ। এটি ঘটে যখন কোনও পদ্ধতি A এর B এর মানটি ফেরতের মাধ্যমে শেষ হয় যেমন পদ্ধতি A তে কল করার পরে এ পদ্ধতির A এর স্ট্যাকটি বাতিল করা যায়।

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

সি # তে পুচ্ছ-পুনরাবৃত্তি কীভাবে ম্যানুয়ালি প্রয়োগ করা যেতে পারে তার একটি উদাহরণ এখানে রয়েছে:

private static int RecursiveMethod(int myParameter)
{
    // Body of recursive method
    if (BaseCase(details))
        return result;
    // ...

    return RecursiveMethod(modifiedParameter);
}

// Is transformed into:

private static int RecursiveMethod(int myParameter)
{
    while (true)
    {
        // Body of recursive method
        if (BaseCase(details))
            return result;
        // ...

        myParameter = modifiedParameter;
    }
}

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

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


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

10
রিচার্ড, আপনার অর্থ কী তা আমি নিশ্চিত নই। এফ # অবশ্যই লেজ নির্গত করে। উপসর্গটি কল করুন, বেশিরভাগ জায়গায়। এর জন্য আইএল পরীক্ষা করুন: "প্রিন্ট x = মুদ্রণ_ কোনও এক্স"।
মাইকেলজিজি

1
আমি বিশ্বাস করি যে জেআইটি কিছু ক্ষেত্রে যাইহোক লেজ পুনরাবৃত্তি ব্যবহার করবে - এবং কিছু ক্ষেত্রে এটির জন্য স্পষ্ট অনুরোধ উপেক্ষা করবে। এটি নির্ভর করে প্রসেসরের আর্কিটেকচার, আইআইআরসি।
জন স্কিটি

3
@Abel: যদিও প্রসেসর স্থাপত্যে অপ্রাসঙ্গিক তত্ত্ব , এটা অপ্রাসঙ্গিক নয় অনুশীলন বিভিন্ন আর্কিটেকচারের জন্য বিভিন্ন JITs .NET মধ্যে লেজ পুনরাবৃত্তির জন্য বিভিন্ন নিয়ম আছে। অন্য কথায়, আপনি খুব সহজেই এমন একটি প্রোগ্রাম করতে পারেন যা x86-তে প্রবাহিত হয়েছিল তবে x64 এ নয়। শুধু কারণ লেজ পুনরাবৃত্তির করতে উভয় ক্ষেত্রেই প্রয়োগ করা মানে এই নয় এটা হল । নোট করুন যে এই প্রশ্নটি .NET সম্পর্কে বিশেষভাবে রয়েছে।
জন স্কেটি

2
সি # আসলে x64 এর অধীনে নির্দিষ্ট ক্ষেত্রে টেল কল করে: কমিউনিটি.বার্টডেসমেট . नेट / ব্লগস / বার্ট / অর্চিভ/2010/07/07/… ।
পিটার ভ্যান জিনকেল

21

এমএসআইএল-এ আপনার এমন একটি ক্লাস থাকতে পারে যা সিস্টেম.অবজেক্ট থেকে উত্তরাধিকারী হতে পারে না।

নমুনা কোড: ilasm.exe এর সাথে এটি সংকলন আপডেট করুন: অ্যাসেম্ববলারকে স্বয়ংক্রিয় উত্তরাধিকার থেকে রোধ করতে আপনাকে অবশ্যই "/ NOAUTOINHERIT" ব্যবহার করতে হবে।

// Metadata version: v2.0.50215
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly sample
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x02F20000


// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit Hello
{
  .method public hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World!"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Hello::Main
} // end of class Hello

2
@ জোন স্কিটি - সমস্ত যথাযোগ্য সম্মানের সাথে, আপনি দয়া করে আমাকে NOAUTOINHERIT বলতে কী বোঝাতে সাহায্য করতে পারেন। এমএসডিএন "যখন কোনও বেস ক্লাস নির্দিষ্ট না করা হয় তখন অবজেক্ট থেকে ডিফল্ট উত্তরাধিকার অক্ষম করে।
রমেশ

2
@ মিশেল - প্রশ্নটি এমএসআইএল সম্পর্কিত, সাধারণ মধ্যবর্তী ভাষা নয় Language আমি সম্মত হলাম এটি সিআইএলে সম্ভব না হলেও এটি এখনও এমএসআইএল
রমেশ ২

4
@ রামেশ: ওফস, আপনি একেবারে ঠিক বলেছেন। আমি তখনই বলতে পারি এটি স্ট্যান্ডার্ড স্পেসটি ভেঙে ফেলেছে এবং এটি ব্যবহার করা উচিত নয়। প্রতিফলক এমনকি অনুমানযোগ্যভাবে লোড হয় না। তবে এটি ইলসমের সাহায্যে করা যেতে পারে। আমি ভাবছি কেন পৃথিবীতে এটা আছে?
জন স্কিটি

4
(আহা, আমি দেখলাম আমার মন্তব্যের পরে / নওটোয়েনেরিট বিট যুক্ত হয়েছিল। কমপক্ষে আমি এটির আগে উপলব্ধি না করা সম্পর্কে কিছুটা ভাল বোধ করছি ...)
জন স্কিটি

1
আমি এটি উইন্ডোজে কমপক্ষে .NET 4.5.2 এ যুক্ত করব এটি সংকলন করে কিন্তু কার্যকর করে না TypeLoadException। পিভারিফাইটি রিটার্ন দেয়: [এমডি]: ত্রুটি: টাইপডেফ যা কোনও ইন্টারফেস নয় এবং অবজেক্ট শ্রেণি নীল টোকেনকে প্রসারিত করে না।
xanatos

20

এটি protectedএবং internalঅ্যাক্সেস সংশোধকগুলি একত্রিত করা সম্ভব । সি # তে, আপনি যদি protected internalকোনও সদস্য লিখেন তবে সমাবেশ এবং ডাইরেক্ট ক্লাস থেকে অ্যাক্সেসযোগ্য। এমএসআইএল এর মাধ্যমে আপনি এমন সদস্য পেতে পারেন যা কেবল অ্যাসেম্বলির অভ্যন্তরে প্রাপ্ত ক্লাস থেকে অ্যাক্সেসযোগ্য । (আমি মনে করি এটি বেশ কার্যকর হতে পারে!)


4
এটা একটা প্রার্থী এখন C # এর 7.1 (বাস্তবায়িত করা হয় github.com/dotnet/csharplang/issues/37 , অ্যাক্সেস পরিবর্তক হয়)private protected
Happypig375

5
এটি সি # 7.2 এর অংশ হিসাবে প্রকাশিত হয়েছে: ব্লগস.এমএসএনএন.মাইক্রোসফট
জো সিওয়েল

18

ওহ, আমি এই সময়ে এটি স্পষ্ট না। (আপনি যদি জন-স্কিটে ট্যাগ যুক্ত করেন তবে এটি সম্ভবত বেশি হয় তবে আমি এটি প্রায়শই চেক করি না))

দেখে মনে হচ্ছে আপনি ইতিমধ্যে বেশ ভাল উত্তর পেয়েছেন। এছাড়াও:

  • আপনি সি # তে মান ধরণের বাক্সিত সংস্করণে কোনও হ্যান্ডেল পেতে পারেন না। আপনি সি ++ / সিএলআই এ পারেন
  • আপনি সি # তে একটি চেষ্টা / ত্রুটি করতে পারবেন না ("দোষ" হ'ল "সমস্ত কিছু ধরুন এবং ব্লকের শেষে পুনরায় পুস্তক" বা "অবশেষে তবে কেবল ব্যর্থতায়")
  • এমন অনেকগুলি নাম রয়েছে যা সি # তবে আইনী আইএল দ্বারা নিষিদ্ধ করা হয়েছে
  • আইএল আপনাকে মান ধরণের জন্য আপনার নিজস্ব প্যারামিটারলেস কনস্ট্রাক্টর সংজ্ঞায়িত করতে দেয় ।
  • আপনি সি # তে "উত্থাপন" উপাদান সহ ইভেন্টগুলি সংজ্ঞায়িত করতে পারবেন না। (ভিবিতে আপনাকে কাস্টম ইভেন্টগুলির জন্য করতে হবে , তবে "ডিফল্ট" ইভেন্টগুলিতে একটি অন্তর্ভুক্ত নেই))
  • কিছু রূপান্তর সিএলআর দ্বারা অনুমোদিত কিন্তু সি # দ্বারা নয়। আপনি যদি objectসি # এর মাধ্যমে যান তবে এগুলি কখনও কখনও কার্যকর হবে। উদাহরণস্বরূপ একটি uint [] / int [] এসও প্রশ্ন দেখুন

আমি অন্য কিছু ভেবে থাকলে আমি এতে যুক্ত করব ...


3
আহ জোন-স্কিট ট্যাগ, আমি জানতাম আমি কিছু মিস করছি!
বিনোজ অ্যান্টনি

অবৈধ আইডেন্টিফায়ার নাম ব্যবহার করতে C # @ সঙ্গে এটি পূর্বে ভী করতে
জর্জ Polevoy

4
@ জর্জ: এটি কীওয়ার্ডগুলির জন্য কাজ করে তবে সমস্ত বৈধ আইএল নাম নয়। <>aসি # তে নাম হিসাবে উল্লেখ করার চেষ্টা করুন ...
জন স্কিটে

17

সিএলআর ইতিমধ্যে জেনেরিক সহ / বিপরীতে সমর্থন করে তবে সি # ৪.০ পর্যন্ত এই বৈশিষ্ট্যটি পাচ্ছে না


আপনি এই বিষয়ে আরও তথ্যের সাথে একটি লিঙ্ক সরবরাহ করতে পারেন?
বিনোজ অ্যান্টনি

14

আইএল এ আপনি যে কোনও প্রকারের থেকে প্রাপ্ত কোনও প্রকারই নিক্ষেপ করতে এবং ধরতে পারবেন System.Exception


6
আপনি সি # তেও এটি করতে পারেন, ক্যাচ-স্টেটমেন্টে try/ catchবন্ধনী ছাড়াই আপনিও অ-ব্যতিক্রমী মত ব্যতিক্রমগুলি ধরতে পারবেন। তবে নিক্ষেপ করা সত্যই তখনই সম্ভব যখন আপনি উত্তরাধিকার সূত্রে প্রাপ্ত হন Exception
হাবিল

@ আবেল আপনি খুব কমই বলতে পারবেন যে আপনি যদি এটির উল্লেখ না করতে পারেন তবে আপনি কিছু ধরছেন।
জিম বাল্টার

2
@ জিমবাল্টার যদি এটি না ধরেন তবে অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে যাবে। যদি আপনি এটি ধরেন, অ্যাপ্লিকেশনটি ক্রাশ হবে না। সুতরাং ব্যতিক্রম বস্তুর উল্লেখ এটি ধরা থেকে পৃথক।
ড্যানিয়েল আরউইকার

হাঃ হাঃ হাঃ! অ্যাপ্লিকেশন সমাপ্তি বা অবিরত করার মধ্যে একটি পার্থক্য পেডেন্ট্রি? এখন আমি মনে করি আমি হয়ত সব শুনেছি।
ড্যানিয়েল আরউইকার

আকর্ষণীয় যথেষ্ট, সিএলআর আপনাকে আর এটি করতে দেয় না। ডিফল্টরূপে এটি রানটাইম মোড়ানো এক্সসেপশন -ব্যতিক্রমী অবজেক্টগুলিকে মোড়বে
জওস্টি

10

আইএল এর ভার্চুয়াল পদ্ধতি কলগুলির মধ্যে callএবং এর মধ্যে পার্থক্য রয়েছে callvirt। প্রাক্তনটি ব্যবহার করে আপনি গতিশীল শ্রেণীর ধরণের ভার্চুয়াল ফাংশনের পরিবর্তে বর্তমান স্ট্যাটিক শ্রেণীর ধরণের ভার্চুয়াল পদ্ধতিতে কল করতে বাধ্য করতে পারেন ।

সি # এর করার কোনও উপায় নেই:

abstract class Foo {
    public void F() {
        Console.WriteLine(ToString()); // Always a virtual call!
    }

    public override string ToString() { System.Diagnostics.Debug.Assert(false); }
};

sealed class Bar : Foo {
    public override string ToString() { return "I'm called!"; }
}

আইবি এর মতো ভিবি, MyClass.Method()সিনট্যাক্স ব্যবহার করে ভার্চুয়াল কলগুলি ইস্যু করতে পারে । উপরের দিকে, এটি হবে MyClass.ToString()


9

চেষ্টা / ধরার ক্ষেত্রে, আপনি নিজের ক্যাচ ব্লক থেকে চেষ্টা ব্লকটি আবার প্রবেশ করতে পারেন। সুতরাং, আপনি এটি করতে পারেন:

.try {
    // ...

  MidTry:
    // ...

    leave.s RestOfMethod
}
catch [mscorlib]System.Exception {
    leave.s MidTry  // branching back into try block!
}

RestOfMethod:
    // ...

আফাইক আপনি সি # বা ভিবিতে এটি করতে পারবেন না


3
কেন এটিকে বাদ দেওয়া হয়েছিল তা আমি দেখতে পাচ্ছি - এর আলাদা গন্ধ আছেGOTO
বেসিক

3
ভিবি.এনইটি
থমাস ওয়েলারের

1
এটি আসলে ভিবি.এনইটি-তে করা যেতে পারে। GoTo বিবৃতিটি এর থেকে শাখা করতে CatchপারেTry । পরীক্ষা কোড রান অনলাইন এখানে
mbomb007

9

আইএল এবং ভিবি.এনইটি দিয়ে আপনি ব্যতিক্রমগুলি ধরার সময় ফিল্টারগুলি যুক্ত করতে পারেন তবে সি # ভি 3 এই বৈশিষ্ট্যটি সমর্থন করে না।

এই ভিবি.এনইটি উদাহরণটি http://blogs.msdn.com/clrteam/archive/2009/02/05/catch-rethrow-and-filters-why-you-should-care.aspx থেকে নেওয়া হয়েছে ( নোটটিতে নোট When ShouldCatch(ex) = Trueকরুন ধারা ধরুন):

Try
   Foo()
Catch ex As CustomBaseException When ShouldCatch(ex)
   Console.WriteLine("Caught exception!")
End Try

17
দয়া করে রিমুভ করুন = True, এটি আমার চোখের রক্ত ঝরছে !
কনরাড রুডল্ফ

কেন? এটি ভিবি এবং সি # নয়, সুতরাং = / == সমস্যা নেই। ;-)
peSHIr

ভাল সি # "নিক্ষেপ;" করতে পারে, তাই একই ফলাফল অর্জন করা যায়।
ফ্র্যাঙ্ক শোয়েটারম্যান

8
paSHIr, আমি বিশ্বাস করি তিনি এটি redudancy সম্পর্কে কথা ছিল
LegendLength

5
@ ফ্র্যাঙ্ক শ্যুইটারম্যান: ব্যতিক্রম ধরা ও পুনরায় ধারণের মধ্যে পার্থক্য রয়েছে, এটি ধরতে গিয়ে ধরে রাখা us ফিল্টারগুলি কোনও নেস্টেড "অবশেষে" বিবৃতি দেওয়ার আগে চলে, তাই ফিল্টার চালিত হওয়ার পরেও যে পরিস্থিতিতে ব্যতিক্রম ঘটেছিল সেগুলি এখনও বিদ্যমান থাকবে। যদি কেউ উল্লেখযোগ্য সংখ্যক সকেটএক্সসেপশন নিক্ষেপ হওয়ার প্রত্যাশা করে যে কেউ তুলনামূলকভাবে নিঃশব্দে ধরতে চাইবে, তবে তাদের মধ্যে কয়েকজনই সমস্যার ইঙ্গিত দিবে, যখন সমস্যাযুক্তটিকে নিক্ষেপ করা হবে তখন রাষ্ট্রটি পরীক্ষা করতে সক্ষম হওয়া খুব দরকারী।
সুপারক্যাট

8

আমি যতদূর জানি, সরাসরি সি # তে মডিউল ইনিশিয়ালাইজারগুলি (একটি সম্পূর্ণ মডিউলটির জন্য স্ট্যাটিক কনস্ট্রাক্টর) তৈরি করার উপায় নেই:

http://blogs.msdn.com/junfeng/archive/2005/11/19/494914.aspx


+1 স্পট চালু! C # একটি মহান মিস, যেমন আমি এখানে খেয়াল
হাবিল

7

Native types
আপনি সরাসরি নেটিভ ইনট এবং স্বাক্ষরযুক্ত স্বাক্ষরিত ইন্ট টাইপগুলির সাথে সরাসরি কাজ করতে পারেন (সি # তে আপনি কেবল একটি ইন্টারপ্রেটারে কাজ করতে পারেন যা একই নয়।

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

<Module>
আপনি যদি ইচ্ছা করেন তবে আপনি ক্লাস সম্পর্কে গণ্ডগোল করতে পারেন (আইএল প্রয়োজন না করে আপনি প্রতিবিম্ব দ্বারা এটি করতে পারেন)

.emitbyte

15.4.1.1 .emitbyte নির্দেশিকা পদ্ধতিবডিআইটি :: =… | .emitbyte Int32 এই নির্দেশের ফলে একটি বিনা স্বাক্ষরিত 8-বিট মান পদ্ধতির সরাসরি সিআইএল স্ট্রিমে নির্গত হয়, যেদিকে নির্দেশটি উপস্থিত হয়। [দ্রষ্টব্য: .emitbyte নির্দেশাবলী পরীক্ষার উত্পন্ন করার জন্য ব্যবহৃত হয়। নিয়মিত প্রোগ্রাম তৈরির ক্ষেত্রে এটির প্রয়োজন হয় না। শেষ নোট]

.entrypoint
আপনার এটিতে আরও কিছুটা নমনীয়তা রয়েছে, আপনি এটি মেইন নয় উদাহরণ হিসাবে প্রয়োগ করতে পারেন।

অনুমানটির একটি পড়ুন আমি নিশ্চিত আপনি আরও কিছু খুঁজে পাবেন।


+1, কিছু লুকানো রত্ন এখানে। দ্রষ্টব্য যে <Module>বিশ্বব্যাপী পদ্ধতিগুলি গ্রহণ করে এমন ভাষাগুলির জন্য বিশেষ শ্রেণি হিসাবে বোঝানো হয়েছে (যেমন ভিবি করেন) তবে সত্যিকার অর্থে সি # এটি সরাসরি অ্যাক্সেস করতে পারে না।
হাবিল

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

@ সুপের্যাট যা ক্ষণস্থায়ী পয়েন্টারের সাথে কাজ করে না, প্রশ্নে থাকা ডেটা হিপ হতে পারে। আপনি যা চান রেফ তা এখানে ফিরে আসার কথা বলে: ব্লগস.এমএসডিএন
এরিক্লিপার্ট

@ শুগিকুক: আকর্ষণীয়। আমি সত্যিই আশা করি এরিককে এমন কোনও উপায় সরবরাহ করতে প্ররোচিত করা যেতে পারে যার মাধ্যমে "ডিক্টঅফপয়েন্টস (কী)। এক্স = 5;" কাজ করা যেতে পারে। এখনই যদি কেউ হার্ড-কোড ডিক্টঅফপয়েন্টগুলিকে টাইপ পয়েন্ট (বা অন্য কোনও বিশেষ ধরণের) সাথে একচেটিয়াভাবে কাজ করতে চায়, তবে কেউ প্রায় সেই কাজটি করতে পারে তবে এটি একটি ব্যথা। বিটিডাব্লু, আমি যে জিনিসটি দেখতে চাই তা হ'ল এমন একটি উপায় যার মাধ্যমে কেউ একটি মুক্ত-সমাপ্ত জেনেরিক ফাংশন লিখতে পারে যেমন ডস স্টাফ <...> (কিছুপ্যারামস, অ্যাকশনবাইরফ <আরও প্যারামস, ...>, ...) যা প্রয়োজন হিসাবে প্রসারিত করতে পারে। আমি অনুমান করব যে এমএসআইএল-তে এটি করার কিছু উপায় থাকবে; কিছু কম্পাইলার সাহায্যে ...
supercat

@ শুগিকুক: ... এটি বাই-রেফারেন্স বৈশিষ্ট্যগুলির আরেকটি উপায় প্রদান করবে, যুক্ত বোনাসের সাথে যে কিছু রেফারেন্স বাইরের লোকেরা রেফারেন্সটিতে যা করতে পারে তার সবকিছুর পরে চলতে পারে।
সুপারক্যাট

6

আপনি পদ্ধতি ওভাররাইড সহ / বিপরীতে-বৈকল্পিক হ্যাক করতে পারেন, যা সি # অনুমোদন করে না (এটি জেনেরিক বৈকল্পের মতো নয়!)। আমি এখানে এটি প্রয়োগের আরও তথ্য পেয়েছি এবং 1 এবং 2 এর অংশ


4

আমি মনে করি যে আমি যার জন্য প্রার্থনা করেছিলাম (পুরোপুরি ভুল কারণে) সে এনামদের উত্তরাধিকার ছিল। এসএমআইএলে এটি করা খুব কঠিন কাজ বলে মনে হচ্ছে না (যেহেতু এনামগুলি কেবল ক্লাস) তবে এটি সি # সিনট্যাক্সটি আপনি করতে চান এমন কিছু নয়।


4

এখানে আরও কিছু রয়েছে:

  1. আপনার প্রতিনিধিদের অতিরিক্ত উদাহরণ পদ্ধতি থাকতে পারে।
  2. প্রতিনিধিরা ইন্টারফেস প্রয়োগ করতে পারে।
  3. আপনার প্রতিনিধি এবং ইন্টারফেসে স্থির সদস্য থাকতে পারে।

3

20) আপনি বাইটের অ্যারেটিকে ইনটগুলির একটি (4x ছোট) অ্যারে হিসাবে বিবেচনা করতে পারেন।

আমি সম্প্রতি এক্সএর এক্সওর বাস্তবায়ন করতে এটি ব্যবহার করেছি, যেহেতু সিএলআর জোর ফাংশনটি ইনটগুলিতে কাজ করে এবং আমার বাইট স্ট্রিমে এক্সওআর করা দরকার।

ফলাফলের কোডটি সি # (প্রতিটি বাইটে এক্সওআর করছেন) এর সমতুল্যর চেয়ে 10x faster দ্রুত গণনা করা হয়।

===

প্রশ্নটি সম্পাদনা করার জন্য এবং # 20 হিসাবে তালিকায় এটি যুক্ত করার মতো পর্যাপ্ত স্ট্যাকওভারফ্লো স্ট্রিট ক্রেডিজ আমার কাছে নেই, অন্য কেউ যদি এটি ফুলে উঠতে পারে ;-)


3
আইএল-এ ডুবানোর পরিবর্তে আপনি অনিরাপদ পয়েন্টার দিয়ে এটি সম্পাদন করতে পারতেন। আমি কল্পনা করতাম এটি ঠিক তত দ্রুত এবং সম্ভবত দ্রুত ছিল, যেহেতু এটি কোনও সীমানা পরীক্ষা করে না।
পি বাবা

3

কিছু অবলম্বনকারী ব্যবহার করেন - আপনার কোনও ক্ষেত্র / পদ্ধতি / সম্পত্তি / ইভেন্টের একই নাম থাকতে পারে।


1
আমি আমার সাইটে একটি নমুনা রেখেছি: jasonhaley.com/files/NameTestA.zip সেই জিপটিতে আইএল এবং একটি এক্সি রয়েছে যা নীচের সমস্ত একই 'এ' সহ একটি শ্রেণি রয়েছে: শ্রেণির নাম এ-এভেন্টের নাম এ-মেঠোড নামক এ-প্রপার্টি নামক এ -2 ক্ষেত্রের নাম রয়েছে এআই, আপনাকে উল্লেখ করার জন্য ভাল রেফারেন্স খুঁজে পাবে না, যদিও আমি সম্ভবত এটি এ্যাকমা ৩৩৫ স্পেক বা সার্জ লিডিনের বইতে পড়েছি।
জেসন হ্যালি

2

এনাম উত্তরাধিকার সত্যই সম্ভব নয়:

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

তবে বিশদটি কার্যকর নয় (আপনি যদি কোনও ব্যক্তি বা রানটাইম নিজেই বিভ্রান্ত করতে না চান তবে))


2

আপনি সিস্টেম থেকে ক্লাসও পেতে পারেন। আইএল-তে মাল্টিকাস্ট ডেলিগেট, তবে আপনি সি # তে এটি করতে পারবেন না:

// নিম্নলিখিত শ্রেণীর সংজ্ঞাটি অবৈধ:

পাবলিক ক্লাস আপনার কাস্টমডেলিগেট: মাল্টিকাস্টডেলিগেট {}


1

আপনি আইএল এবং সি # তে মডিউল-স্তর (ওরফে গ্লোবাল) পদ্ধতিগুলিও সংজ্ঞায়িত করতে পারেন, বিপরীতে, কেবলমাত্র যতক্ষণ না তারা কমপক্ষে একটি প্রকারের সাথে যুক্ত থাকে ততক্ষণ পদ্ধতিগুলি আপনাকে সংজ্ঞায়িত করতে দেয়।

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