2010-02-24 14 views
7

मैं सभी Foo के सदस्यों के लिए Height का उपयोग करता हूं। इसएक सामान्य वर्ग की एक स्थिर संपत्ति का उपयोग करें?

public class Foo<T> 
{ 
    public static int FoosHeight; 
} 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     Foo<???>.FoosHeight = 50; // DO I Set "object" here? 
    } 
} 

की तरह एक ही स्थिति VB.NET में है।

+1

आर्ग! मेरी आँखें! –

+2

आपकी आंखों में क्या गलत है? – serhio

उत्तर

13

आपको वहां कुछ सामान्य प्रकार पैरामीटर रखना होगा। ऐसा कहा जा रहा है कि, मैं कभी-कभी सामान्य प्रकार पैरामीटर में डाले बिना इस कार्यक्षमता को प्राप्त करने के लिए किसी प्रकार की विरासत योजना का उपयोग करूंगा।

public class Foo 
{ 
    public static int FoosHeight; 
} 

public class Foo<T> : Foo 
{ 
    // whatever 
} 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     Foo.FoosHeight = 50; // DO I Set "object" here? 
    } 
} 

कहा जा रहा है, यह वही FoosHeight सामान्य प्रकार पैरामीटर Foo<T> में पारित कर दिया की परवाह किए बिना रखेंगे। यदि आप Foo<T> के प्रत्येक संस्करण के लिए एक अलग मान चाहते हैं, तो आपको उस प्रकार पैरामीटर में डालने के लिए एक प्रकार चुनना होगा, और विरासत योजना को भूलना होगा।

+0

मुझे लगता है, वही समाधान VB.NET में भी काम करना चाहिए? – serhio

+0

हां, यह चाहिए। वही सामान्य विचार, बस इसे VB.NET में फिर से लिखें। किसी भी ऑनलाइन कोड कनवर्टर चाल करना चाहिए। –

2

प्रत्येक विशिष्ट जेनेरिक यह स्वयं का प्रकार है, और इसलिए इसका अपना स्थिर चर है। तो Foo<int> में Foo<string> की तुलना में एक अलग स्थिर ऊंचाई सदस्य होगा। यदि आप चाहते हैं कि सभी विशिष्ट Foo<T> प्रकारों के बीच साझा किया जाए, तो आपको कहीं और लागू करने की आवश्यकता है।

यदि आप वास्तव में Foo<object> प्रकार के लिए मान सेट करना चाहते हैं, तो यह केवल Foo<object> है।

+0

मुझे लगता है कि वही स्थिति Foo के साथ होगी, मेरा मतलब है कि Foo Foo serhio

+0

से भिन्न होगा जो सही है। यह टाइप सिस्टम में एक अलग इकाई है। –

7

आप इस तरह के

Foo<int>.FoosHeight = 50; 

या

Foo<Bar>.FoosHeight = 50; 

के रूप में, एक प्रकार निर्दिष्ट करने की आवश्यकता है, लेकिन प्रत्येक अलग है। Foo<int>.FoosHeightFoo<Bar>.FoosHeight से संबंधित नहीं है। वे प्रभावी रूप से दो अलग-अलग वर्गों के साथ दो अलग-अलग वर्ग हैं। आप मूल्य सभी फू < के लिए एक ही होना चाहते हैं> तो आप> एक अलग जगह की जरूरत है की तरह

FooHelper.FoosHeight = 50; 

यह स्टोर करने के लिए और FooHelper फू < साथ कोई औपचारिक संबंध नहीं है।

+0

बहुत अच्छी व्याख्या। –

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