2010-12-02 17 views
5

मैं परिवर्तनीय परिशुद्धता के साथ विभिन्न संरचनाओं को बनाने में सक्षम होना चाहता हूं। उदाहरण के लिए:क्या संख्याओं का प्रतिनिधित्व करने वाले मूल्य प्रकारों द्वारा साझा किए गए कोई इंटरफेस हैं?

public struct Point<T> where T : INumber 
{ 
    public T X; 
    public T Y; 

    public static Point<T> operator +(Point<T> p1, Point<T> p2) 
    { 
     return new Point<T> 
        { 
         X = p1.X+p2.X, 
         Y = p1.Y+p2.Y 
        }; 
    } 
} 

मैं माइक्रोसॉफ्ट दो संरचनाओं बनाने के द्वारा इस के साथ सौदों पता है - (चल बिन्दु संख्या, के लिए) Point (पूर्णांकों के लिए) और PointF लेकिन आप एक बाइट आधारित बिंदु, या डबल सटीकता की जरूरत पड़ती है, तो आपको बहुत सारे पुराने कोड की प्रतिलिपि बनाना होगा और केवल मूल्य प्रकारों को बदलना होगा।

+3

यह SO प्रश्न देखें: http://stackoverflow.com/questions/4322383/why-dont-number-types-not-share-a-common-interface/4322432#4322432 –

+0

पता नहीं था कि आप सी # ... अच्छा! + rep'ing :) – Machinarius

उत्तर

2

एक सरल कारण तुम ऐसा क्यों नहीं कर सकते है: ऑपरेटर्स, गैर आभासी हैं जैसे कि, संकलक संकलन समयp1.X+p2.X एक पूर्णांक अलावा या एक डबल है कि क्या पता होना चाहिए।

+0

क्या संकलक समय संकलित नहीं करता है कि टी क्या है, यद्यपि? शायद यह एक इंटरफ़ेस की तरह काम नहीं करना चाहिए, लेकिन यह सी # की एक अच्छी भाषा सुविधा होगी - टी को एक संख्या होने के लिए मजबूर करने की क्षमता, ताकि आप +, -, * और/का उपयोग कर सकें। – dlras2

+2

@ डैनियल: नहीं, यह संकलन समय पर टी के प्रकार को नहीं जानता ... आप एक पुस्तकालय विकसित कर सकते हैं, इसलिए संकलक नहीं जान सकता * कौन सा * आपके ग्राहक आपकी कक्षा में जाएंगे। – Heinzi

+0

पुस्तकालय के बारे में अच्छी बात - मुझे जेनेरिक खतरनाक होने के बारे में पर्याप्त जानकारी है। हालांकि, यह बहुत बुरा है। उन्हें सी # 5.0 के लिए कुछ समाधान देखना चाहिए, क्योंकि यह वास्तव में आसान होगा। – dlras2

0

नहीं, ऐसा कोई इंटरफ़ेस नहीं है।

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