2013-01-15 82 views
3

法例外,我有下面的類,從數據表繼承:缺少繼承

public class ExcelStaticDataTable : DataTable 
{ 
    public List<ExcelStaticDataTable> SubTables { get; set; } 
    public ExcelStaticDataTable(string tableName): base(tableName) 
    { 
     SubTables = new List<ExcelStaticDataTable>(); 
    } 
} 

你知道爲什麼即時得到一個MissingMethodException「這個對象定義參數的構造函數」當我做到以下幾點:

ExcelStaticDataTable table=new ExcelStaticDataTable("table1"); 
table.Clone(); 

這兩段代碼都在不同的dll中,只是爲了澄清。這裏stacktrace:

at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) 
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) 
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) 
    at System.Activator.CreateInstance(Type type, Boolean nonPublic) 
    at System.Data.DataTable.CreateInstance() 
    at System.Data.DataTable.Clone(DataSet cloneDS) 
    at System.Data.DataTable.Clone() 
    at System.Data.DataTable.Copy() 
    at ..........cs:line 35 

謝謝。

+0

是你在一個不同的dll得到錯誤的代碼?你也可以發佈完整的堆棧嗎? – Dhawalk

+0

是的,類ExcelStaticDataTable和Clone在兩個不同的dll中。它說「沒有爲此對象定義的無參數構造函數」 – Jose3d

+0

這兩個項目都使用相同的.Net框架構建? – Dhawalk

回答

5

我懷疑其他代碼是使用object newObj = Activator.CreateInstance(GetType());作爲Clone()的一部分。這需要一個默認用法的公共無參數構造函數。否則它會拋出MissingMethodException

更新:顯示堆棧跟蹤的更新證實了這一點。

我懷疑你可以通過重寫CreateInstance方法解決這個問題:

protected override DataTable CreateInstance() 
{ 
    return new ExcelStaticDataTable(TableName); 
} 
+0

感謝您的支持。它是我需要的! – Jose3d