2011-05-27 31 views
12

पर तर्क कैसे पारित किए जाते हैं यह सी # शुरुआत से प्रश्न होगा। जब मैं कंसोल एप्लिकेशन बनाता हूं तो मुझे पैरामीटर के साथ मुख्य विधि मिलती है सरणी स्ट्रिंग के रूप में। मुझे समझ में नहीं आता कि इस विधि को सिस्टम द्वारा कैसे कहा जाता है और मुख्य विधि में तर्क कैसे पारित किए जाते हैं। शायद कोई समझा सकता है? क्या मुख्य विधि किसी प्रकार की कंसोल कक्षा से अधिक है?कंसोल ऐप तर्क, मुख्य विधि

namespace ConsoleApplication1 
{ 
    class Program 
    {  
     static void Main(string[] args) 
     {  
     } 
    } 
} 

उत्तर

18

मुख्य विधि आपके आवेदन का प्रवेश बिंदु है। आप तो ildasm के माध्यम से चेकआउट तो

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 

यह वही विधि

तर्कों के रूप कहना C:\AppName arg1 arg2 arg3

0

रनटाइम इंजन का मुख्य तरीका int main(int argc, char *argv[]) जैसा दिखता है, जहां argc तर्कों की संख्या की गणना है और argv प्रत्येक के लिए पॉइंटर्स की एक सरणी है। रनटाइम इंजन इसे एक ऐसे रूप में परिवर्तित करता है जो सी # के लिए अधिक प्राकृतिक है।

उस मुख्य विधि से पहले, सब कुछ असेंबली भाषा में है। इसके पास कमांड लाइन तर्कों तक पहुंच है (क्योंकि ऑपरेटिंग सिस्टम प्रत्येक प्रक्रिया के लिए उपलब्ध कराता है), लेकिन उस असेंबली भाषा को पूर्ण कमांड लाइन की एक स्ट्रिंग को एकाधिक सबस्ट्रिंग्स में परिवर्तित करने की आवश्यकता होती है (व्हाइट्स स्पेस का उपयोग करके उन्हें अलग करने से पहले) उन्हें मुख्य() में पास करने के लिए तैयार है।

6

क्रम प्रत्येक स्थान पर कंसोल पर दिए गए तर्कों के विभाजन पारित कर रहे हैं बुला करने में मदद करता है।

आप

myApp.exe arg1 arg2 arg3 

को कॉल करते हैं मुख्य विधि

var args = new string[] {"arg1","arg2","arg3"} 
1

कमांड लाइन तर्क की एक सरणी हो जाता है एक तरह से तर्क पारित करने के लिए है। This MSDN नमूना बाहर की जाँच के लायक है। कमांड लाइन तर्कों के लिए MSDN Page पढ़ने योग्य भी है।

दृश्य स्टूडियो के भीतर से आप अपने कंसोल आवेदन तो डिबग टैब

+0

था कि इसका जवाब मैं खोज रहा था, कैसे बनाम में मुख्य विधि डिबगिंग के लिए मानकों को पारित करने के लिए – RobertoFRey

1

हर exe कामयाब चयन का गुण का चयन द्वारा आदेश पंक्ति तर्क सेट कर सकते हैं एक एक प्रवेश बिंदु जो देखा जा सकता है जब यदि आप अपने कोड को लोड है आईएलडीएएसएम को एंट्री प्वाइंट सीएलआर की अध्यक्षता में निर्दिष्ट है और ऐसा कुछ दिखता है।

enter image description here

1

पढ़ें MSDN

इसमें तर्कों का एक लिंक भी शामिल है।

संक्षिप्त उत्तर: नहीं, मुख्य ओवरराइड नहीं मिलता है। जब दृश्य स्टूडियो (वास्तव में संकलक) आपके exe बनाता है यह assmebly के लिए एक प्रारंभिक बिंदु घोषित करना चाहिए, वह बिंदु मुख्य कार्य है।

यदि आपका मतलब साहित्यिक पास तर्कों के बारे में है तो आप या तो आप उनके साथ कमांड लाइन से ऐप चला सकते हैं (जैसे appname.exe param1 param2) या प्रोजेक्ट सेटअप में, उन्हें दर्ज करें (कमांड लाइन तर्क में डीबग टैब)

मुख्य में

आप उदाहरण के लिए उन आर्ग को पढ़ने के लिए की आवश्यकता होगी:

for (int i = 0; i < args.Length; i++) 
{ 
    string flag = args.GetValue(i).ToString(); 
    if (flag == "bla") 
    { 
     Bla(); 
    } 
} 
8

कैसे कहा जाता है मुख्य है?

आप कोड एक विधि स्टार्टअप वस्तु में मुख्य बुलाया के रूप में मुख्य आवेदन करने के लिए प्रवेश बिंदु के रूप में बाजार है की आवश्यकता होती है संकलित किया जाएगा सांत्वना आवेदन टेम्पलेट का उपयोग कर रहे हैं।

डिफ़ॉल्ट रूप से प्रोजेक्ट प्रोपरी सेटिंग्स में कोई स्टार्टअप ऑब्जेक्ट निर्दिष्ट नहीं है और प्रोग्राम क्लास डिफ़ॉल्ट रूप से उपयोग की जाएगी। यदि आप चाहें तो "बिल्ड" टैब के तहत प्रोजेक्ट प्रॉपर्टी में इसे बदल सकते हैं।

ध्यान रखें कि जिस भी ऑब्जेक्ट को आप स्टार्टअप ऑब्जेक्ट के रूप में असाइन करते हैं, उसमें मुख्य नाम का एक तरीका होना चाहिए।

आर्ग मुख्य विधि को पास किया जाता कैसे

स्वीकार किए जाते हैं प्रारूप MyConsoleApp.exe value01 value02 आदि ...

आवेदन एक अलग तत्व में प्रत्येक स्थान के बाद प्रत्येक मान प्रदान करती है पैरामीटर सरणी का।

इस प्रकार, MyConsoleApp.exe value01 value02 अपने आर्ग मतलब होगा पैरामीटर 2 तत्व हैं:

[0] = "value01" 

[1] = "value02" 

कैसे आप इनपुट मानों को पार्स करने और उपयोग करने के लिए उन्हें आप पर निर्भर है।

आशा है कि इससे मदद मिलेगी।

अतिरिक्त पढ़ना:

Creating Console Applications (Visual C#)

Command-Line Arguments (C# Programming Guide)

0

आप इस समारोह में समारोह बनाकर भी पारित कर सकते हैं और फिर आप मुख्य विधि कॉल और मुख्य विधि करने के लिए तर्क पारित

static int Main(string[] args) 
    { 


     foreach (string b in args) 
      Console.WriteLine(b+" "); 

     Console.ReadKey(); 
     aa(); 
     return 0; 

    } 
    public static void aa() 
    { 
     string []aaa={"Adil"}; 

     Console.WriteLine(Main(aaa)); 
    } 
2

दृश्य स्टूडियो में आप कॉमंडलाइन तर्क से आसानी से या टालने के लिए ऐसा भी कर सकते हैं

static void Main(string[] args) 
    { 
     if (args == null) 
     { 
      Console.WriteLine("args is null"); // Check for null array 
     } 
     else 
     { 
      args=new string[2]; 
      args[0] = "welcome in"; 
      args[1] = "www.overflow.com"; 
      Console.Write("args length is "); 
      Console.WriteLine(args.Length); // Write array length 
      for (int i = 0; i < args.Length; i++) // Loop through array 
      { 
       string argument = args[i]; 
       Console.Write("args index "); 
       Console.Write(i); // Write index 
       Console.Write(" is ["); 
       Console.Write(argument); // Write string 
       Console.WriteLine("]"); 
      } 
     } 
24

सभी उत्तरों भयानक कर रहे हैं और बहुत अच्छी तरह से सब कुछ समझाया

लेकिन मैं सिर्फ

  1. right click on project तो Properties
  2. चुनें दृश्य स्टूडियो में मुख्य विधि

    को differant way for passing args कहना चाहता हूँ

  3. debug tab पर जाएं start options अनुभाग पर प्रदान करें अपने आर्ग

इस छवि

Properties window

की तरह और खुश जानते हुए भी रहस्य के साथ एप्लिकेशन

संबंधित मुद्दे