সি # এবং .NET এর মধ্যে পার্থক্য কী?


204

আমি কী সি # এবং। নেট এর মধ্যে পার্থক্য জানতে পারি? আমি যখন সি # এর কথা চিন্তা করি, তখনই আমি বলব এটি একটি নেট নেট ভাষা, তবে আমি যখন চাকরির পোস্টগুলি অনুসন্ধান করি তখন তাদের পরীক্ষার্থীদের সি # এবং। নেট অভিজ্ঞতা থাকতে হবে। কেউ আমাকে একটি ব্যাখ্যা দিতে পারেন?


41
আমি প্রয়োজনীয় পোস্টিংগুলি ব্যাখ্যা করতে পারি ... সেগুলি নন-নেট বিকাশকারীদের দ্বারা লেখা। হয় এইচআর বা পরিচালনা ভাবেন যারা পার্থক্য বুঝতে প্রয়োজন হয় না।
ডেভিড

2
আপনি একেবারে ঠিক আছেন, আমার দুজনের মধ্যেই জানা উচিত। আমি বেশ কিছুদিন ধরে সি # ব্যবহার করে আসছি এবং সর্বদা ব্যবহার করি। সি কোড করার সময় নেট লাইব্রেরি ক্লাস তবে দুজনের মধ্যে পার্থক্য রাখতে কখনই সময় নিবেন না। তবে এখন আমি জানি, ধন্যবাদ ..
বোফা

উত্তর:


128

অ্যান্ড্রু যা বলেছিলেন তা ছাড়াও এটি লক্ষণীয় যে:

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

একটি ভাষা , একটি রানটাইম এবং একটি লাইব্রেরির মধ্যে পার্থক্য । নেট / সি # তে আরও কঠোর, উদাহরণস্বরূপ সি ++ এর ক্ষেত্রে, যেখানে ভাষার নির্দিষ্টকরণে কিছু প্রাথমিক লাইব্রেরি ফাংশন অন্তর্ভুক্ত থাকে। সি # স্পেসিফিকেশন পরিবেশ সম্পর্কে খুব সামান্যই বলেছে (মূলত, এটিতে কিছু ধরণের যেমন থাকা উচিত intতবে এটি কমবেশি সমস্ত)।


197

সি # একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ, .NET একটি কম্বল শব্দ যা .NET ফ্রেমওয়ার্ক (একটি অ্যাপ্লিকেশন ফ্রেমওয়ার্ক লাইব্রেরি) এবং কমন ল্যাঙ্গুয়েজ রানটাইম উভয়টি অন্তর্ভুক্ত করে যা নেট রান অ্যাসেমব্লিগুলি চালিত হয় run

মাইক্রোসফ্টের সি # এর প্রয়োগ কার্যকরভাবে নেট নেট ফ্রেমওয়ার্কের সাথে একীভূত হয়েছে সুতরাং এটি দুটি ধারণাটি বিভ্রান্ত হবে তা বোধগম্য। তবে এটি বুঝতে গুরুত্বপূর্ণ যে এগুলি দুটি খুব আলাদা জিনিস।

এখানে সি # তে লিখিত একটি শ্রেণি রয়েছে:

class Example { }

এখানে সি # তে লিখিত একটি শ্রেণী রয়েছে যা স্পষ্টভাবে একটি .NET ফ্রেমওয়ার্ক সমাবেশ, প্রকার এবং পদ্ধতি ব্যবহার করে:

class Example
{
    static void Main()
    {
        // Here we call into the .NET framework to 
        // write to the output console
        System.Console.Write("hello, world");
    }
}

যেমনটি আমি আগেই বলেছি, মাইক্রোসফ্ট .NET ফ্রেমওয়ার্কটি ব্যবহার না করে সি # এর মাইক্রোসফ্টের প্রয়োগটি ব্যবহার করা খুব কঠিন। Exampleউপরে আমার প্রথম প্রয়োগটি এমনকি। নেট ফ্রেমওয়ার্ক ব্যবহার করে (অন্তর্নিহিত, হ্যাঁ, তবে তা এটি ব্যবহার করে) কারণ Exampleউত্তরাধিকার সূত্রে প্রাপ্ত System.Object

এছাড়াও, আমি মাইক্রোসফ্টের সি # এর প্রয়োগকরণ শব্দটি ব্যবহার করার কারণ হ'ল সি # এর অন্যান্য বাস্তবায়ন উপলব্ধ


3
@ তেজস - আসলে, ভিবি.এনইটি। নেট। ভিবি নয়।
এরিক মিক্কেলেন

+1 অ্যান্ড্রু হরে। @ তেজস: সি # এবং ভিবি উভয়ই নেট নেটতে একীভূত, এটি। নেট নয়। .NET একটি কাঠামো। উদাহরণস্বরূপ, আপনি ডেলফিতে। নেট করতে পারেন। যদি সি # নেট হয়, তবে আপনি ডেল্ফি। নেট এ সি # কোড করতে সক্ষম হবেন যা স্পষ্টভাবে নাযোগ্য এবং এমনকি অকল্পনীয়ও নয়।
মারকুইলার

তেমনি, সি # তে প্রোগ্রাম করার জন্য আপনার নেট নেট থাকার কোনও কারণ নেই, যদিও আমি সিট # লেখেন এমন কাউকেই জানি না। নেট বা মনোও।
ডেভিড থর্নলি

.NET সিএলআর হ'ল সব ধরণের। একাধিক ভাষাগুলি সমর্থন করার জন্য, তারা সিটিএস - প্রচলিত টাইপ সিস্টেম নিয়ে আসে যা প্রকারভেদগুলি কীভাবে সংজ্ঞায়িত করতে হবে এবং তাদের নিয়ন্ত্রণের নিয়মগুলি যেমন উত্তরাধিকার, অবজেক্ট আজীবন ইত্যাদি ইত্যাদি নির্ধারণ করে সি সি ++ / সিএলআই, সি #, ভিবি এই সমস্ত ভাষা এই ধরণের সাথে সামঞ্জস্যপূর্ণ (আপনি এটি লঙ্ঘন করতে পারে তবে আমি এতে প্রবেশ করতে চাই না)। .আপনিটি নির্মান করতে আপনি কোন ভাষা ব্যবহার করেন তা বিবেচনা না করেই, নেট নেট সিএলআর দ্বারা কার্যকর করার সময় আচরণ একই হবে। তাই সিটিএসের মাধ্যমে সংযোগ থাকলেও ভাষা এবং .NET পৃথকভাবে বিকশিত হতে পারে। ভিএস2012 উদাহরণস্বরূপ সি # 6 সংকলকটি সমর্থন করে না তবে নেট 4.6
ফ্র্যাঙ্ক কিউ।


49

সি # একটি শক্তিশালী অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা যা বেশিরভাগ .NET ফ্রেমওয়ার্কে নির্মিত।

সি # হ'ল বিমান এবং .NET রানওয়ে;)


15

সি # একটি ভাষা,। নেট একটি অ্যাপ্লিকেশন কাঠামো। .NET গ্রন্থাগারগুলি সিএলআরতে চলতে পারে এবং এইভাবে সিএলআরতে চলতে পারে এমন যে কোনও ভাষাও .NET গ্রন্থাগারগুলি ব্যবহার করতে পারে।

আপনি যদি জাভার সাথে পরিচিত হন তবে এটি একই রকম ... জাভা হ'ল একটি ভাষা যা জেভিএম এর উপরে নির্মিত ... যদিও পূর্ব-একত্রিত জাভা লাইব্রেরির যে কোনওটি JVM এর উপরে নির্মিত অন্য ভাষা ব্যবহার করতে পারে।



2
প্রচলিত ভাষা রানটাইম
ইয়াহিয়া-ইমাম মুনির

1
@ কাসুনসিয়াম্বলাপিতিয়া সিএলআর কোড কোডটি স্থানীয় কোডে রূপান্তর করতে ব্যবহার করত আমার অর্থ আপনি একটি কোড লেখেন সি # রূপান্তরটি এই সি # => সিএলআর => নেটিভ কোডের মতো হবে। তারপর এটি লিনাক্স বা উইন্ডোজ মত সব প্ল্যাটফর্মের চালানো হবে
logeshpalani98

10

লোকেরা "। নেট ফ্রেমওয়ার্ক" সম্পর্কে কথা বলার সময় তারা দুটি প্রধান ক্ষেত্র - রানটাইম লাইব্রেরি এবং ভার্চুয়াল মেশিনের সংমিশ্রণ করতে থাকে যা আসলে নেট নেট কোড চালায় runs

আপনি যখন সি # তে ভিজ্যুয়াল স্টুডিওতে একটি ক্লাস লাইব্রেরি তৈরি করেন, তখন ডিএলএল একটি নির্ধারিত ফর্ম্যাটটি অনুসরণ করে - খুব মোটামুটিভাবে, এমন একটি বিভাগ রয়েছে যাতে এতে মেটা ডেটা রয়েছে যা এতে শ্রেণীর অন্তর্ভুক্ত রয়েছে এবং কী কী ফাংশন রয়েছে ইত্যাদি বর্ণনা করে and যেখানে এটি বর্ণনা করে বাইনারি মধ্যে যারা বস্তুর উপস্থিতি। এই সাধারণ। নেট ফর্ম্যাটটি হ'ল লাইব্রেরিগুলিকে .NET ভাষা (সি #, ভিবি। নেট, এফ # এবং অন্যান্য) এর মধ্যে সহজে ভাগ করা যায়। যদিও। নেট "রানটাইম লাইব্রেরি" এখন সি # তে লিখিত হয়েছে (আমি বিশ্বাস করি), আপনি কল্পনা করতে পারেন যে তাদের মধ্যে কতগুলি নিয়ন্ত্রণহীন ভাষায় রচনা করা যেতে পারে তবে এই নির্ধারিত বিন্যাসে সাজানো হয়েছিল যাতে সেগুলি নেট ভাষার দ্বারা গ্রাস করা যায় could ।

আপনি যে লাইব্রেরিটি তৈরি করেন তার আসল "মাংস" সিআইএল ("কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ") নিয়ে গঠিত যা। নেট এর সমাবেশ ভাষার মতো কিছুটা - আবার, এই ভাষাটি সমস্ত নেট নেটওয়ার্কের সাধারণ আউটপুট, যা কোনটি কোনও নেট নেট ভাষা দ্বারা নেট গ্রন্থাগারগুলি ভোজনযোগ্য করে তোলে।

"Ildasm.exe" সরঞ্জামটি ব্যবহার করে, যা মাইক্রোসফ্ট এসডিকে (এবং আপনার কম্পিউটারে ইতিমধ্যে উপস্থিত থাকতে পারে) এ অবাধে উপলব্ধ, আপনি দেখতে পাচ্ছেন যে কীভাবে # # কোড মেটা ডেটা এবং আইএলে রূপান্তরিত হয়। আমি উদাহরণ হিসাবে এই উত্তর নীচে একটি নমুনা অন্তর্ভুক্ত করেছি।

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

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

তবে এমন অনেক সময় রয়েছে যে আপনি সি # লিখতে পারেন যা। নেট পরিবেশের মধ্যে কার্যকর করা হবে না - উদাহরণস্বরূপ, ব্রিজ.এনইটি জাভাস্ক্রিপ্টে "সি # কোড কম্পাইল করে" যা ব্রাউজারে চালিত হয় (যে দলটি এটি তৈরি করে সেখানে চলে গেছে) জাভাস্ক্রিপ্টে রচিত। নেট রানটাইম লাইব্রেরির সংস্করণগুলি লেখার প্রচেষ্টা এবং সুতরাং। নেট লাইব্রেরির শক্তি এবং নমনীয়তা উত্পন্ন জাভাস্ক্রিপ্টের জন্য উপলব্ধ)। এটি সি # এবং। নেট এর মধ্যে বিচ্ছেদের একটি নিখুঁত উদাহরণ - এটি বিভিন্ন "টার্গেট" এর জন্য সি # রচনা করা সম্ভব; আপনি নেট নেটটাইম পরিবেশ (যখন আপনি একটি নির্বাহযোগ্য নির্মাণ করবেন) বা আপনার ব্রাউজার পরিবেশকে লক্ষ্য করতে পারেন (যখন আপনি ব্রিজ.এনইটি ব্যবহার করেন) target

একটি (খুব) সাধারণ উদাহরণ শ্রেণি:

using System;

namespace Example
{
    public class Class1
    {
        public void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }
}

ফলাফল মেটা ডেটা এবং আইএল (ildasm.exe মাধ্যমে প্রাপ্ত):

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Example
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                            63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.

  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 ) 

  .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 0A 54 65 73 74 49 4C 44 41 53 4D 00 00 )    // ...TestILDASM..
  .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 0A 54 65 73 74 49 4C 44 41 53 4D 00 00 )    // ...TestILDASM..
  .custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 12 43 6F 70 79 72 69 67 68 74 20 C2 A9 20   // ...Copyright .. 
                                                                                                  20 32 30 31 36 00 00 )                            //  2016..
  .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( 01 00 24 31 39 33 32 61 32 30 65 2D 61 37 36 64   // ..$1932a20e-a76d
                                                                                                  2D 34 36 33 35 2D 62 36 38 66 2D 36 63 35 66 36   // -4635-b68f-6c5f6
                                                                                                  32 36 36 31 36 37 62 00 00 )                      // 266167b..
  .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )             // ...1.0.0.0..
  .custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01 00 1C 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B   // ....NETFramework
                                                                                                        2C 56 65 72 73 69 6F 6E 3D 76 34 2E 35 2E 32 01   // ,Version=v4.5.2.
                                                                                                        00 54 0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73   // .T..FrameworkDis
                                                                                                        70 6C 61 79 4E 61 6D 65 14 2E 4E 45 54 20 46 72   // playName..NET Fr
                                                                                                        61 6D 65 77 6F 72 6B 20 34 2E 35 2E 32 )          // amework 4.5.2
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}
.module Example.dll
// MVID: {80A91E4C-0994-4773-9B73-2C4977BB1F17}
.imagebase 0x10000000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x05DB0000

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

.class public auto ansi beforefieldinit Example.Class1
       extends [mscorlib]System.Object
{
  .method public hidebysig instance void 
          SayHello() cil managed
  {
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Class1::SayHello

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       8 (0x8)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  nop
    IL_0007:  ret
  } // end of method Class1::.ctor

} // end of class Example.Class1

// =============================================================

8

.NET- এ আপনি কেবল সি # খুঁজে পাবেন না। উদাহরণস্বরূপ আপনি ভিজ্যুয়াল বেসিকটি সন্ধান করতে পারেন। যদি কোনও কাজের জন্য .NET জ্ঞান প্রয়োজন হয় তবে সম্ভবত এটির জন্য এমন একটি প্রোগ্রামার প্রয়োজন যাঁরা .NET ফ্রেমওয়ার্কের সরবরাহকৃত ভাষার সম্পূর্ণ সেট জানেন knows


1
আপনি একেবারে ঠিক আছেন এবং প্রধান শিরোনাম জন্য ধন্যবাদ। যদিও আমি এই প্রশ্নে কেবল # সি উল্লেখ করেছি, তবে সেই নির্দিষ্ট কাজের পোস্টে এটি ভিবিও উল্লেখ করেছে ..
বোফা

5

সি # একটি প্রোগ্রামিং ভাষা।

। নেট উইন্ডোজে অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত একটি কাঠামো।

। নেট ফ্রেমওয়ার্কটি সি # তে সীমাবদ্ধ নয়। বিভিন্ন ভাষা লক্ষ্য করে। নেট ফ্রেমওয়ার্ক এবং সেই কাঠামোটি ব্যবহার করে অ্যাপ্লিকেশন তৈরি করতে পারে। উদাহরণগুলি F # বা VB.Net


4

C#একটি পৃথক রানটাইম লাইব্রেরি নেই। এটি .NETরানটাইম লাইব্রেরি হিসাবে ব্যবহার করে ।


আপনি মাইক্রোসফ্ট সি # এর প্রয়োগকরণ বলতে চাইছেন।
নিশান্ত জর্জ আগরওয়াল

হ্যাঁ. অন্যান্য বাস্তবায়ন সম্পর্কে আমার ধারণা নেই।
যিহূদা

অ্যান্ড্রু হার তার উত্তরে যেমন উল্লেখ করেছেন, মনো সি #
ভোর্ট

3

এখানে আমি আপনাকে একটি লিঙ্ক সরবরাহ করেছি যেখানে সি # ভাষা এবং। নেট ফ্রেমওয়ার্ক প্ল্যাটফর্ম আর্কিটেকচারটি কী তা ব্যাখ্যা করুন । মনে রাখবেন যে সি # একটি সাধারণ-উদ্দেশ্য, অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষা এবং এটি নেট ফ্রেমওয়ার্কে চলে।

.NET ফ্রেমওয়ার্কে ফ্রেমওয়ার্ক ক্লাস লাইব্রেরি (এফসিএল) নামে একটি বৃহত শ্রেণীর পাঠাগার অন্তর্ভুক্ত রয়েছে এবং এটি ব্যবহারকারী ইন্টারফেস, ডেটা অ্যাক্সেস, ডাটাবেস সংযোগ, ক্রিপ্টোগ্রাফি, ওয়েব অ্যাপ্লিকেশন ডেভলপমেন্ট, সংখ্যার আলগোরিদিম এবং নেটওয়ার্ক যোগাযোগ সরবরাহ করে।

.NET ফ্রেমওয়ার্কটি মাইক্রোসফ্ট দ্বারা বিকাশ করা হয়েছিল যা মূলত মাইক্রোসফ্ট উইন্ডোজে চলে।

মাইক্রোসফ্ট ডক্স থেকে সি # ভাষা এবং .NET ফ্রেমওয়ার্কের পরিচিতি

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