2012-02-21 15 views
15

मैं एक नाम समस्या टकरा जबकिएफ # में नेमस्पेस एलियासिंग?

open System.IO 

मैंने पाया और उपयोग अब परस्पर विरोधी प्रकार के लिए प्रकार का पूरा नाम प्रदान करना है ही एकमात्र विकल्प का उपयोग कर मेरी एफ # कोड में कुछ नेट विधानसभाओं खोलने है, लेकिन यह एक है थोड़ा उबाऊ।

क्या नामांकन को रोकने के लिए एफ # में नेट नेमस्पेस के लिए उपनाम परिभाषित करने की कोई संभावना है?

उत्तर

27

एफ # नामस्थानों के अलियासिंग का समर्थन नहीं करता - केवल मॉड्यूल और प्रकार। इसलिए, .NET असेंबली के बीच संघर्षों को हल करने के लिए, आप दुर्भाग्यवश, आपके द्वारा उपयोग किए जा रहे सभी प्रकार के लिए उपनाम परिभाषित करने की आवश्यकता होगी।

यह तथ्य थोड़ा आसान हो सकता है कि तथ्य यह है कि एफ # प्रकार उपनाम सामान्य प्रकार की घोषणाओं के रूप में देखा जाता है (एफ # कंपाइलर द्वारा, रनटाइम द्वारा नहीं)। इसका मतलब है कि, सी # using कीवर्ड के साथ विपरीत, आप उन्हें एक spearate फ़ाइल में परिभाषित कर सकते हैं:

// Aliases.fs 
namespace SysIO 

// Open the 'System' namespace to get a bit shorter syntax 
// ('type File = File' is interpreted as discriminated union) 
open System 

type File = IO.File 
type Directory = IO.Directory 

आपके आवेदन के बाकी में, आप अब SysIO.File उपयोग कर सकते हैं। आपको अभी भी उपनाम लिखना है, लेकिन कम से कम आपको प्रत्येक फ़ाइल में ऐसा करने की ज़रूरत नहीं है ...

+1

यह एक अच्छा समाधान है, मुझे बस कुछ प्रकार की ज़रूरत है। –

+0

"केवल मॉड्यूल और प्रकार": यह केवल प्रकार है, मॉड्यूल को एलियाड नहीं किया जा सकता है। खुशी से गलत होगा। – citykid

+2

खुशी से मैं गलत हूँ। मॉड्यूल को इस प्रकार उपनाम किया जा सकता है: मॉड्यूल ACMEStore = ACME.DB.Store (http://stackoverflow.com/questions/3918744/how-to-use-namespace-or-type-alias-abrack) – citykid