C # और .NET के बीच अंतर क्या है?


204

क्या मुझे पता है कि C # और .NET में क्या अंतर है? जब मैं C # के बारे में सोचता हूं, तो मैं तुरंत कहूंगा कि यह एक .NET लैंग्वेज है, लेकिन जब मैं जॉब पोस्ट्स की खोज करता हूं, तो उन्हें C # और .NET अनुभव के लिए उम्मीदवारों की आवश्यकता होती है। क्या कोई मुझे स्पष्टीकरण दे सकता है?


41
मैं आवश्यकताओं को समझा सकता हूँ पोस्टिंग ... वे non-.NET डेवलपर्स द्वारा लिखित हैं। या तो मानव संसाधन या प्रबंधन लोग जो भेद को समझने की आवश्यकता नहीं है।
डेविड

2
आप बिल्कुल सही हैं, मुझे दोनों के बीच पता होना चाहिए। मैं काफी समय से C # का उपयोग कर रहा हूं और हमेशा .Net लाइब्रेरी क्लास का उपयोग करता हूं जब C # कोडिंग करता हूं लेकिन दोनों के बीच अंतर करने के लिए कभी भी समय नहीं लेता। लेकिन अब मुझे पता है, धन्यवाद ..
बोफा

जवाबों:


128

एंड्रयू ने क्या कहा इसके अलावा, यह ध्यान देने योग्य है कि:

  • .NET सिर्फ एक पुस्तकालय नहीं है , बल्कि अनुप्रयोगों के निष्पादन के लिए एक रनटाइम भी है ।
  • C # का ज्ञान .NET के कुछ ज्ञान का अर्थ है (क्योंकि C # ऑब्जेक्ट मॉडल .NET ऑब्जेक्ट मॉडल से मेल खाता है और आप C # .NET लाइब्रेरी का उपयोग करके C # में कुछ दिलचस्प कर सकते हैं)। यह अनिवार्य रूप से सही नहीं है क्योंकि आप .NET अनुप्रयोगों को लिखने के लिए अन्य भाषाओं का उपयोग कर सकते हैं।

भाषा , रनटाइम और लाइब्रेरी के बीच अंतर C ++ में उदाहरण के लिए .NET / C # में अधिक सख्त है, जहां भाषा विनिर्देश में कुछ बुनियादी लाइब्रेरी फ़ंक्शन भी शामिल हैं। C # विनिर्देश केवल पर्यावरण के बारे में बहुत कम कहता है (मूल रूप से, इसमें कुछ प्रकार होने चाहिए जैसे कि int, लेकिन यह कमोबेश सभी है)।


197

C # एक प्रोग्रामिंग लैंग्वेज है। .NET एक कंबल शब्द है जो .NET फ्रेमवर्क (एक एप्लीकेशन फ्रेमवर्क लाइब्रेरी) और कॉमन लैंग्वेज रनटाइम दोनों को कवर करने के लिए जाता है। रनटाइम जिसमें .NET असेंबली चलती है।

Microsoft का C # का कार्यान्वयन .NET फ्रेमवर्क के साथ भारी रूप से एकीकृत है, इसलिए यह समझा जा सकता है कि दोनों अवधारणाएँ भ्रमित होंगी। हालांकि यह समझना महत्वपूर्ण है कि वे दो बहुत अलग चीजें हैं।

यहाँ एक वर्ग C # में लिखा गया है:

class Example { }

यहां C # में लिखा गया एक वर्ग है जो .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ऊपर भी मेरा पहला कार्यान्वयन .NET फ्रेमवर्क का उपयोग करता है (संक्षेप में, हाँ, लेकिन यह इसका उपयोग फिर भी करता है) क्योंकि Exampleइनहेरिट करता है System.Object

इसके अलावा, मैं Microsoft के C # के कार्यान्वयन के वाक्यांश का उपयोग करता हूं , क्योंकि C # के अन्य कार्यान्वयन उपलब्ध हैं


3
@Tejs - दरअसल, VB.NET .NET है। VB नहीं है।
एरिक मिकेलसेन

+1 एंड्रयू हरे। @Tejs: C # और VB दोनों .NET के लिए भारी एकीकृत हैं, यह .NET नहीं है। .NET एक फ्रेमवर्क है। उदाहरण के लिए, आप डेल्फी में .NET कर सकते हैं। यदि C # .NET है, तो आप डेल्फी .NET में C # कोड कर पाएंगे, जो स्पष्ट रूप से उल्लेखनीय और यहां तक ​​कि असंबद्ध नहीं है।
विल मार्कोइलर

इसी तरह, C # में प्रोग्राम करने के लिए आपके पास .NET होने का कोई कारण नहीं है, हालाँकि मैं किसी ऐसे व्यक्ति के बारे में नहीं जानता जो बिना .NET या मोनो के C लिखता हो।
डेविड थॉर्नले

.NET CLR सभी प्रकारों के बारे में है। कई भाषाओं का समर्थन करने के लिए, वे सीटीएस के साथ आए - सामान्य प्रकार की प्रणाली जो परिभाषित करती है कि किस प्रकार परिभाषित किया जाना चाहिए और उन्हें नियंत्रित करने वाले नियम जैसे कि उत्तराधिकार, वस्तु जीवनकाल आदि। C ++ / CLI, C #, VB सभी भाषाएं इन प्रकारों के अनुरूप हैं (आप इसका उल्लंघन हो सकता है लेकिन मैं इसमें नहीं पड़ूँगा)। प्रकार का निर्माण करने के लिए आप किस भाषा का उपयोग करते हैं, इसके बावजूद .NET CLR द्वारा निष्पादित होने पर व्यवहार समान होगा। इसलिए, भाषा और .NET अलग से विकसित हो सकते हैं, हालांकि CTS के माध्यम से कनेक्शन है। VS2012 उदा। C # 6 संकलक का समर्थन नहीं करता है, लेकिन .NET 4.6 के साथ काम करता है
फ्रैंक Q.

55

C # एक प्रोग्रामिंग भाषा है। .NET वह फ्रेमवर्क है जिस पर भाषा का निर्माण किया जाता है।


49

C # एक मजबूत ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है जो ज्यादातर .NET फ्रेमवर्क पर बनाई गई है।

C # हवाई जहाज है और .NET रनवे है;)


15

C # एक भाषा है, .NET एक एप्लीकेशन फ्रेमवर्क है। .NET लाइब्रेरीज़ CLR पर चल सकती हैं और इस प्रकार कोई भी भाषा जो CLR पर चल सकती है। .NET लाइब्रेरीज़ भी इस्तेमाल कर सकती हैं।

यदि आप जावा से परिचित हैं, तो यह समान है ... जावा JVM के शीर्ष पर निर्मित भाषा है ... हालांकि पूर्व-इकट्ठे जावा पुस्तकालयों में से किसी का उपयोग JVM के शीर्ष पर निर्मित किसी अन्य भाषा द्वारा किया जा सकता है।


क्या मतलब है CLR?
कसुन सियामबलपिटिया

2
आम भाषा रनटाइम
याहया-इमाम मुनीर

1
@KasunSiyambalapitiya सीएलआर कोड को मूल कोड में परिवर्तित करने के लिए उपयोग किया जाता है मेरा मतलब है कि आप एक कोड सी लिखते हैं # रूपांतरण इस सी # => सीएलआर => मूल कोड की तरह होगा। फिर यह लिनक्स या विंडोज़ जैसे सभी प्लेटफ़ॉर्म
चलाएगा

10

जब लोग ".net फ्रेमवर्क" के बारे में बात करते हैं, तो वे दो मुख्य क्षेत्रों को जोड़ते हैं - रनटाइम लाइब्रेरी और वर्चुअल मशीन वास्तव में .net कोड चलाते हैं।

जब आप C # में Visual Studio में एक क्लास लाइब्रेरी बनाते हैं, तो DLL एक निर्धारित प्रारूप का अनुसरण करता है - बहुत मोटे तौर पर, इसमें वह अनुभाग होता है जिसमें मेटा डेटा होता है जो बताता है कि इसमें कौन सी कक्षाएं शामिल हैं और उनके क्या कार्य हैं, आदि .. और यह बताता है कि कहाँ बाइनरी में वे ऑब्जेक्ट मौजूद हैं। यह सामान्य .net प्रारूप वह है जो पुस्तकालयों को .net भाषाओं (C #, VB.Net, F # और अन्य) के बीच आसानी से साझा करने की अनुमति देता है। हालाँकि, अधिकांश .net "रनटाइम लाइब्रेरी" को C # अब (मुझे विश्वास है) में लिखा गया है, आप कल्पना कर सकते हैं कि उनमें से कितने को अप्रबंधित भाषाओं में लिखा जा सकता था, लेकिन इस निर्धारित प्रारूप में व्यवस्थित किया गया ताकि उन्हें .net द्वारा उपभोग किया जा सके। ।

आपके द्वारा बनाई गई लाइब्रेरी का वास्तविक "मांस" सीआईएल ("सामान्य मध्यवर्ती भाषा") से बना होता है, जो कि असेंबली भाषा की .net की तरह एक सा है - फिर से, यह भाषा सभी .net भाषाओं का सामान्य आउटपुट है, जो कि है। किसी भी .net भाषा द्वारा .net पुस्तकालयों को उपभोज्य बनाता है।

टूल "ildasm.exe" का उपयोग करना, जो Microsoft SDK में स्वतंत्र रूप से उपलब्ध है (और पहले से ही आपके कंप्यूटर पर हो सकता है), आप देख सकते हैं कि C # कोड मेटा डेटा और IL में कैसे परिवर्तित किया जाता है। मैंने एक उदाहरण के रूप में इस उत्तर के नीचे एक नमूना शामिल किया है।

जब आप निष्पादित .net कोड चलाते हैं, तो आमतौर पर क्या हो रहा है। नेट वर्चुअल मशीन पढ़ रही है कि आईएल और इसे संसाधित करना। यह .net का दूसरा पक्ष है और, फिर से, आप कल्पना कर सकते हैं कि यह आसानी से एक अप्रबंधित भाषा में लिखा जा सकता है - इसे "केवल" वीएम निर्देशों को पढ़ने और उन्हें चलाने की जरूरत है (और कचरा कलेक्टर के साथ एकीकृत करना होगा, जिसकी आवश्यकता भी है .net कोड नहीं है)।

मैंने जो वर्णन किया है वह (फिर से, मोटे तौर पर) तब होता है जब आप विज़ुअल स्टूडियो में निष्पादन योग्य बनाते हैं (अधिक जानकारी के लिए, मैं अत्यधिक "जेफ़री रिक्टर द्वारा सीएलआर # सीएलआर के माध्यम से" पुस्तक की सिफारिश करता हूं - यह बहुत विस्तृत और उत्कृष्ट रूप से लिखा गया है)।

हालाँकि, कई बार ऐसा होता है कि आप C # लिख सकते हैं जो कि .net वातावरण में निष्पादित नहीं किया जाएगा - उदाहरण के लिए, Bridge.NET "C" कोड को जावास्क्रिप्ट में संकलित करता है जो तब ब्राउज़र में चलाया जाता है (उत्पादन करने वाली टीम) .net रनटाइम लाइब्रेरी के संस्करणों को लिखने का प्रयास जो जावास्क्रिप्ट में लिखा गया है और इसलिए .net लाइब्रेरी की शक्ति और लचीलापन उत्पन्न जावास्क्रिप्ट के लिए उपलब्ध है)। यह C # और .net के बीच अलगाव का एक आदर्श उदाहरण है - विभिन्न "लक्ष्य" के लिए C # लिखना संभव है; आप .net रनटाइम वातावरण (जब आप एक निष्पादन योग्य का निर्माण करते हैं) को लक्षित कर सकते हैं या आप ब्राउज़र वातावरण (जब आप Bridge.NET का उपयोग करते हैं) को लक्षित कर सकते हैं।

ए (बहुत) सरल उदाहरण वर्ग:

using System;

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

परिणामी मेटा डेटा और IL (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 में आपको केवल C # नहीं मिलता है। आप उदाहरण के लिए Visual Basic पा सकते हैं। यदि किसी नौकरी के लिए .NET ज्ञान की आवश्यकता होती है, तो शायद उसे एक प्रोग्रामर की आवश्यकता होती है जो .NET फ्रेमवर्क द्वारा प्रदान की जाने वाली भाषाओं के पूरे सेट को जानता हो।


1
आप बिल्कुल सही हैं और हेडअप के लिए धन्यवाद। हालाँकि मैं इस प्रश्न में केवल C # का उल्लेख करता हूं, लेकिन उस विशेष नौकरी पोस्ट में, यह VB का भी उल्लेख करता है ..
बोफा

5

C # एक प्रोग्रामिंग लैंग्वेज है।

.Net विंडोज पर एप्लिकेशन के निर्माण के लिए उपयोग किया जाने वाला एक फ्रेमवर्क है।

.Net फ्रेमवर्क C # तक सीमित नहीं है। विभिन्न भाषाएं। नेट फ्रेमवर्क को लक्षित कर सकती हैं और उस फ्रेमवर्क का उपयोग करके एप्लिकेशन बना सकती हैं। उदाहरण F # या VB.Net हैं


4

C#एक अलग रनटाइम लाइब्रेरी नहीं है। यह .NETएक रनटाइम लाइब्रेरी के रूप में उपयोग करता है ।


आपका मतलब है Microsoft का c # लागू करना।
निशांत जॉर्ज अग्रवाल

हाँ। मुझे अन्य कार्यान्वयनों का कोई पता नहीं है।
जूड

जैसा कि एंड्रयू हरे ने अपने जवाब में उल्लेख किया है, मोनो ग #
Vort3x

3

यहाँ मैंने आपको एक लिंक प्रदान किया है जिसमें बताया गया है कि C # Language और .NET फ्रेमवर्क प्लेटफ़ॉर्म आर्किटेक्चर क्या है । याद रखें कि C # एक सामान्य-उद्देश्य, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है, और यह .NET फ्रेमवर्क पर चलता है।

.NET फ्रेमवर्क में फ्रेमवर्क क्लास लाइब्रेरी (FCL) नाम का एक बड़ा वर्ग पुस्तकालय शामिल है और उपयोगकर्ता इंटरफ़ेस, डेटा एक्सेस, डेटाबेस कनेक्टिविटी, क्रिप्टोग्राफी, वेब एप्लिकेशन डेवलपमेंट, न्यूमेरिक एल्गोरिदम और नेटवर्क संचार प्रदान करता है।

.NET फ्रेमवर्क माइक्रोसॉफ्ट द्वारा विकसित किया गया था जो मुख्य रूप से माइक्रोसॉफ्ट विंडोज पर चलता है।

Microsoft डॉक्स से C # भाषा और .NET फ्रेमवर्क का परिचय

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.