मैं C # 6 "स्टेटिक का उपयोग कर" सुविधा का उपयोग कैसे करूं?


123

मैं C # 6 में नई सुविधाओं के एक जोड़े को देख रहा हूं , विशेष रूप से, "स्थैतिक का उपयोग करके"

स्टैटिक का उपयोग करना क्लॉज का उपयोग करने का एक नया प्रकार है, जिससे आप सीधे टाइप के स्थिर सदस्यों को दायरे में आयात कर सकते हैं।
(ब्लॉग पोस्ट के नीचे)

आइडिया इस प्रकार है, कुछ ट्यूटोरियल के अनुसार मैंने पाया,
इसके बजाय:

using System;

class Program 
{ 
    static void Main() 
    { 
        Console.WriteLine("Hello world!"); 
        Console.WriteLine("Another message"); 
    } 
}

आप Consoleस्थिर वर्ग का उपयोग करते हुए नई C # 6 सुविधा का उपयोग करते हुए, बार-बार कथन को छोड़ सकते हैं :

using System.Console;
//           ^ `.Console` added.
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } // ^ `Console.` removed.
}

हालाँकि, यह मेरे लिए काम नहीं करता है। मुझे usingकथन पर एक त्रुटि मिल रही है , कह रही है:

"एक ' using namespace' निर्देश केवल नामस्थान के लिए लागू किया जा सकता है, ' Console' एक प्रकार नहीं एक नाम स्थान है पर विचार करें एक '। using static' निर्देश बजाय"

मैं दृश्य स्टूडियो 2015 का उपयोग कर रहा हूं, और मेरे पास "C # 6.0" के लिए निर्मित भाषा संस्करण है

क्या देता है? क्या msdn ब्लॉग का उदाहरण गलत है? यह काम क्यों नहीं करता है?


नवीनतम अपडेट को प्रतिबिंबित करने के लिए ब्लॉग पोस्ट को अब अपडेट कर दिया गया है, लेकिन ब्लॉग के नीचे चले जाने की स्थिति में यहां स्क्रीनशॉट है:

ब्लॉग

जवाबों:


177

ऐसा प्रतीत होता है कि उन ब्लॉग पोस्ट के लिखे जाने के बाद से वाक्यविन्यास थोड़ा बदल गया है। जैसा कि त्रुटि संदेश बताता है, staticअपने शामिल बयान में जोड़ें :

using static System.Console;
//      ^
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } 
}

फिर, आपका कोड संकलन करेगा।


ध्यान दें कि, C # 6.0 में, यह केवल घोषित सदस्यों के लिए काम करेगा static

उदाहरण के लिए, विचार करें System.Math:

public static class Math {
    public const double PI = 3.1415926535897931;
    public static double Abs(double value);
    // <more stuff>
}

जब using static System.Math, आप बस का उपयोग कर सकते हैं Abs();
हालाँकि, आपको अभी भी उपसर्ग करना होगा PIक्योंकि यह एक स्थिर सदस्य नहीं है Math.PI;:।

C # संस्करण 7.2 के साथ शुरू करना, यह मामला नहीं होना चाहिए, constजैसे मूल्यों का PIउपयोग किया जा सकता है।


3
मुझे एक समान समस्या हो रही है, लेकिन इसके बजाय System.Math, विशेष रूप से Math.PI। जब मैं उपयोग करता हूं using static System.Math, तो Sqrt()कार्य की तरह विधियां, लेकिन एक निरंतर की तरह नहीं PI। मुझे लिखना जारी रखना है Math.PIया कोड संकलित नहीं करना है। मैं उत्सुक हूं कि यह काम क्यों नहीं करता है। क्या मुझे इसके लिए एक नया प्रश्न प्रस्तुत करना चाहिए?
स्कर्ट

5
@ वस्त्र: जो एक नए प्रश्न के लिए सामग्री की तरह लगता है, हाँ।
सेरेब्रस

1
@ स्कर्वी के प्रश्न के त्वरित उत्तर के रूप में: "स्टेटिक का उपयोग क्लॉज का उपयोग करने का एक नया प्रकार है जो आपको स्थैतिक सदस्यों को आयात करने देता है <...>" । वर्ग का PIएक स्थिर सदस्य नहीं है Math। यह एक स्थिर है। सीधे शब्दों में कहें: सदस्य के रूप में घोषित किया जाना है static
सेरेब्रस

3
एक नए वाक्यविन्यास के लिए एक अवसर की तरह लगता है: using const System.Math;:)
फिलिप स्कैकुन

1
Microsoft दस्तावेज़ीकरण दावों में उदाहरण उपसर्ग के बिना उपयोग किया जा सकता है: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Guney Ozsan

1

staticकीवर्ड एक पर usingबयान केवल एक, निर्दिष्ट प्रकार आयात करेगा (और यह नेस्टेड प्रकार है)। इसके अलावा आपको अब टाइप नाम नहीं देना चाहिए। तो बस अपने उपयोग के लिए स्थैतिक जोड़ें।

नोट: कृपया इस सुविधा का उपयोग केवल तब करें जब दो वर्ग तार्किक रूप से निकटता से संबंधित हों, अन्यथा यह कोड को बहुत कठिन बनाता है।


"आपको टाइप नाम नहीं देना चाहिए" इससे आपका क्या मतलब है? मैंने ऐसा कहां किया?
सेरेब्रस

थोबियास, मैं दोनों को कहीं जोड़ नहीं रहा हूं।
सेरेब्रस

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