簡體   English   中英

如何在C#中從字符串創建實例?

[英]How do I create an instance from a string in C#?

我正在從XML中讀取信息,其中包含我需要實例化的對象類型及其構造函數參數。

對象類型實際上位於兄弟命名空間內的另一個項目中。 (我需要在Company.Project1類中創建一個Company.Project2.Type。)

我發現了這個問題 ,但它沒有處理構造函數參數或它在另一個命名空間中的事實。

我怎樣才能做到這一點?

編輯:項目屬性中未正確設置程序集名稱和默認名稱空間。

  • 您需要為Type.GetType()指定完整的類型名稱,包括名稱空間,例如“Company.Project2.Type”
  • 如果類型不在同一個程序集(或mscorlib)中,則還需要提供程序集名稱,包括強類型的版本信息。 例如,對於非強類型程序集Company.Project2.dll ,您可以指定“Company.Project2.Type,Company.Project2”。
  • 要使用參數調用構造函數,可以調用Activator.CreateInstance(Type, Object[])或使用Type.GetConstructor()獲取所需的確切構造函數,然后調用ConstructorInfo.Invoke()

如果這沒有幫助,請提供更多信息。

如果要在運行時動態創建類型,Activator.CreateInstance方法將為您完成。 如果發出的是具有帶參數的構造函數的類型,則此重載將執行此操作。 例如, http://msdn.microsoft.com/en-us/library/wcxyzt4d.aspx

我建議通過重載來尋找最佳匹配。

命名空間問題應該不是相關的 - 只要dll在bin目錄或GAC中就可以了。 如果程序集名稱很強,則規則可能會更改。

你能提供代碼的代碼片段(使用你鏈接的方法)嗎? 這+你看到的錯誤將非常有幫助! [更新]使用處理具有參數的構造函數的Activator.CreateInstance的快速示例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            BaseProduct b =(BaseProduct)System.Activator.CreateInstance(Type.GetType("ConsoleApplication1.Product")
                ,new object[]{typeof(string)}, 
                new object[]{"123"}
            );
            //Activator..::.CreateInstance Method (Type, array<Object>[]()[], array<Object>[]()[])
        }
    }
    public class Product: BaseProduct{
        public  Product(string id) { 

        }
        public string Id {get;set;}


   }

    public abstract class BaseProduct {
        abstract public string Id { get; set; }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM