2011-01-27 16 views
5
Type classType = typeof(SomeClass); 
bool equal = Marshal.GenerateGuidForType(classType) == classType.GUID; 

मुझे ऐसा कोई मामला नहीं मिला है जो इस स्थिति को विफल करता है।मार्शल.जेनरेट गुइडफ़ोर टाइप (टाइप) और Type.GUID के बीच क्या अंतर है?

तो क्यों और मैं बस GUID संपत्ति हो रही के बजाय Marshal विधि का उपयोग करना चाहिए जब?

उत्तर

5

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.generateguidfortype.aspx

... GenerateGuidForType Type.GUID संपत्ति के रूप में एक ही कार्यक्षमता प्रदान करता है देखते हैं।

तो दस्तावेज़ीकरण के अनुसार वे वही हैं। हालांकि, मार्शल। जेनरेट गुइडफ़ोर टाइप केवल रनटाइम टाइप ऑब्जेक्ट्स के लिए काम करता है, जबकि Type.GUID कुछ अन्य प्रकार के कार्यान्वयन के लिए भी प्रदान किया जाता है।

उदा .:

 

using System; 
using System.CodeDom; 
using System.Runtime.InteropServices; 
using System.Workflow.ComponentModel.Compiler; 

namespace Samples 
{ 
    class Program 
    { 
     static CodeCompileUnit BuildHelloWorldGraph() 
     { 
      var compileUnit = new CodeCompileUnit(); 
      var samples = new CodeNamespace("Samples"); 
      compileUnit.Namespaces.Add(samples); 

      var class1 = new CodeTypeDeclaration("Class1"); 
      samples.Types.Add(class1); 

      return compileUnit; 
     } 


     static void Main(string[] args) 
     { 
      var unit = BuildHelloWorldGraph(); 
      var typeProvider = new TypeProvider(null); 
      typeProvider.AddCodeCompileUnit(unit); 
      var t = typeProvider.GetType("Samples.Class1"); 
      Console.WriteLine(t.GUID); // prints GUID for design time type instance. 
      Console.WriteLine(Marshal.GenerateGuidForType(t)); // throws ArgumentException. 
     } 
    } 
} 
 
2

MSDN के अनुसार, "GenerateGuidForType Type.GUID संपत्ति के रूप में एक ही कार्यक्षमता प्रदान करता है"। यह आपके लिए उपयुक्त है कि एक का उपयोग करने के लिए सुरक्षित होना चाहिए।