2012-07-17 12 views
5

मैं एक स्थिर क्षेत्र में एक प्रकार कैसे स्टोर कर सकते हैं, ताकि मैं कुछ इस तरह कर सकते हैं (ध्यान दें: सिर्फ एक उदाहरण, स्यूडोकोड में) ?:स्टोर क्षेत्र में प्रकार/चर

public class Logger 
{ 
    public static Type Writer; 

    public static void SetWriter(Type @new) 
    { 
     Writer = @new; 
    } 

    public static void Write(string str) 
    { 
     Writer.Write(str); 
    } 
} 
+0

आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? कोड में नहीं बल्कि एक अमूर्त विचार के रूप में? –

+0

मैं किसी भी प्रकार के चर में एक प्रकार को स्टोर करने की कोशिश कर रहा हूं, लेकिन स्वयं में एक प्रकार एक कथन नहीं है, इसलिए यह काम नहीं करता है ... – Jwosty

+1

क्या आप किसी प्रकार के उदाहरण का उपयोग नहीं कर सकते, Type'? शायद 'टेक्स्टवाइटर' की तरह कुछ? – svick

उत्तर

2

के अलावा तथ्य यह है कि new एक कीवर्ड है, इस प्रकार को स्टोर करने के लिए आपका कोड ठीक काम करना चाहिए।

हालांकि, अपने कोड

Writer.Write(str); 

अर्थहीन है।

कक्षा Type में कोई विधि Write(string) नहीं है।

यह महसूस करता है कि आप क्या कर रहे हैं के बाद एक interface

public interface IWriter 
{ 
    public Write(string text); 
} 

public class Logger 
{ 
    public static IWriter Writer; 

    public static void SetWriter(IWriter newWriter) 
    { 
     Writer = newWriter; 
    } 

    public static void Write(string str) 
    { 
     Writer.Write(str); 
    } 
} 

इस तरह है की तरह है, तो आप किसी भी वर्ग कि SetWriter में IWriter लागू करता है, उदा से होकर गुजरेगा

public class MyWriter : IWriter 
{ 
    public void Write(string text) 
    { 
     // Do something to "write" text 
    } 
} 

Logger.SetWriter(new MyWriter()); 
+0

मैंने अपनी सटीक स्थिति का बेहतर वर्णन करने के लिए पोस्ट को बदल दिया है – Jwosty

0

खैर, उस उदाहरण कोड को कोई समझ नहीं आता है, लेकिन क्यों न केवल एक सामान्य इंटरफ़ेस का उपयोग करें? उदाहरण के लिए, सभी (मुझे लगता है कि सभी कम से कम) अमूर्त वर्ग TextWriter से System.IO नाम स्थान इनहेरिट में प्रकार पाठ लिखने के, इसलिए ...

उदाहरण के लिए:

public class Logger 
{ 
    public Logger(TextWriter writer) 
    { 
     _writer = writer; 
    } 

    private TextWriter _writer;  

    public void Write(string text) 
    { 
     _writer.Write(text); 
    } 
} 

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

11

बहुत ही सरल:

Type variableName = typeof(SomeTypeName); 

या

Type variableName = someObject.GetType(); 

सुनिश्चित नहीं हैं कि इस है, हालांकि आप वास्तव में क्या करना चाहते हैं क्या साथ में मदद मिलेगी। अन्य उत्तरों देखें।

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