2

我正在使用 Managed Extensibility Framework (MEF) 在 .Net 中学习可插入架构。我在网上看到了示例代码,但是当我尝试实现它时,我一度陷入困境。

该代码正在使用:

 var catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
 var container = new CompositionContainer(catalog.CreateResolver());

var在 C# 3.0 上可用,因为我在 C# 2.0 中编码。

以上两种说法的替代方案是什么?如何使用 VS 2005 使它们在 c# 2.0 中工作?


我现在试过这个bt它的说法

错误 1​​找不到类型或命名空间名称“AttributedAssemblyPartCatalog”(是否缺少 using 指令或程序集引用?) C:\Documents and Settings\test\Desktop\MEFDemo\MEFDemo\Program.cs 31 13 MEFDemo

我在哪里添加了对 SystemComponentModel.Composition 的引用

4

6 回答 6

11

基本上,var强制编译器根据变量的“初始化程序”来确定(推断)变量的编译时=类型——实际上是从符号向右的表达式。这里的类型很明显:

AttributedAssemblyPartCatalog catalog = 
    new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container = 
    new CompositionContainer(catalog.CreateResolver());

并确保添加using System.ComponentModel.Composition;声明。另外,请注意AttributedAssemblyPartCatalog已重命名为AssemblyCatalog.

于 2009-05-13T08:38:12.703 回答
1
AttributedAssemblyPartCatalog catalog = new 
    AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());

CompositionContainer container = new 
    CompositionContainer(catalog.CreateResolver());
于 2009-05-13T08:36:20.723 回答
1

C# 中的变量仍然是强类型的。var是隐式键入 - 请参阅MSDN

在大多数情况下,这只是意味着您必须少输入,但在某些情况下是必要的 - 在我链接到的页面上的第二个示例中:

var必须使用,因为结果是匿名类型的集合,并且除了编译器本身之外,无法访问该类型的名称。

于 2009-05-13T08:43:03.413 回答
1

这是 C# 3.0 中类型推断的使用。

使用关键字时

var

在 c# 3.0 中,编译器推断类型。见斯科特·古思里斯的解释

在 c# 2.0 中,您必须声明变量的类型与 c# 1.1 相同

例如

Type variableName = new Type();

让你上面的代码示例

AttributedAssemblyPartCatalog catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());

CompositionContainer container = new CompositionContainer(catalog.CreateResolver());

高温高压

于 2009-05-13T08:47:26.587 回答
0

var是 C# 3.0 关键字,除了从初始化值推断强类型外,什么也不做。

在没有 var 的情况下,您手动执行编译器在幕后执行的操作;您在声明中指定变量的类型。

因此;

AttributedAssemblyPartCatalog catalog = new 
    AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());

CompositionContainer container = new 
    CompositionContainer(catalog.CreateResolver());
于 2009-05-13T08:41:43.883 回答
0

MEF 使用 LINQ,因此需要 .NET 3.5。尝试在 .NET 2.0 上使用它不会有任何运气。

于 2009-05-13T18:23:32.793 回答