![](/img/trans.png)
[英]Why do TaskFactory.FromAsync() overloads require a state object to be supplied?
[英]Why do unused overloads require a project reference?
我正在尋找一個解釋,為什么在使用該類中的其他構造函數將構建並正確運行時,包含未引用類的未使用的構造函數重載會產生編譯時錯誤。
這是一些演示該問題的示例代碼。
// Console Project - references CL1 but not CL2
static void Main(String[] args)
{
var rc1 = new ReferencedClass(); // compiles and runs
var rc2 = new ReferencedClass(1); // wont compile. Needs CL2 reference
var rc3 = new ReferencedClass(0, ""); // compiles and runs
}
// Class Library 1 (CL1) - references CL2
public class ReferencedClass
{
private UnreferencedClass _unreferencedClass;
public ReferencedClass()
{
_unreferencedClass = new UnreferencedClass();
}
public ReferencedClass(Int32 id)
{
_unreferencedClass = new UnreferencedClass();
}
public ReferencedClass(UnreferencedClass uf)
{
_unreferencedClass = uf;
}
public ReferencedClass(Int32 id, String name)
{
_unreferencedClass = new UnreferencedClass();
}
}
// Class Library 2 (CL2)
public class UnreferencedClass {}
在所有情況下,沒有使用帶有未引用類的構造函數,那么為什么構建在Int32
重載構造函數上失敗?
編譯器在重載解析期間需要該類型。
請看: https : //connect.microsoft.com/VisualStudio/feedback/details/817276/error-cs0012-the-type-is-defined-in-an-assembly-that-is-not-referenced-issued-for -an延伸法-即-是-未使用
來自連接鏈接的釋義答案:
在將程序中的名稱“ReferencedClass”歸為意義的過程中,編譯器遵循其查找規則來確定必須檢查的方法集。 兩個構造函數都采用一個參數作為重載決策的一部分進行檢查。 為了確定哪一個對調用有意義,編譯器必須理解構造函數簽名中的所有類型。 如果由於缺少引用而找不到某些類型,則編譯器不會簡單地丟棄候選者,而是要求用戶提供缺少的引用。
看起來您的代碼示例不完整。 正如你在這里引用它,它不會重現錯誤。
它會重現如果
像這樣:
namespace SomeNameSpace
{
public class UnitOfWork
{
public UnitOfWork()
{
}
public string Context { get; set; }
}
}
然后在ProjectA中,這將編譯正常:
using SomeNamespace;
//...
public void MyFunc()
{
var unitOfWork = new UnitOfWork();
// ...
var context = unitOfWork.Context;
// ...
}
即使這樣編譯也可以:
using ProjectB;
//...
public void MyFunc()
{
var unitOfWork = new UnitOfWork(1);
// ...
}
但這需要額外的參考:
using ProjectB;
//...
public void MyFunc()
{
var unitOfWork = new UnitOfWork(1);
// ...
var context = unitOfWork.Context;
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.