【发布时间】:2010-04-29 16:11:13
【问题描述】:
如果有一个新项目(ProjNew),我想在其中放置几个在其他项目(ProjOld)上的类。
问题是我想维护标记为 Obsolete 的旧类以避免运行我的所有项目并检查它们是否使用它。
但是这样可能会抛出一个模棱两可的类名错误,因为我没有通过命名空间显式调用。
有没有办法在过时的情况下说明在歧义情况下使用什么程序集?
【问题讨论】:
标签: c# class obsolete ambiguous
如果有一个新项目(ProjNew),我想在其中放置几个在其他项目(ProjOld)上的类。
问题是我想维护标记为 Obsolete 的旧类以避免运行我的所有项目并检查它们是否使用它。
但是这样可能会抛出一个模棱两可的类名错误,因为我没有通过命名空间显式调用。
有没有办法在过时的情况下说明在歧义情况下使用什么程序集?
【问题讨论】:
标签: c# class obsolete ambiguous
不完全清楚你在问什么,但我还是会试一试。
假设您有两个 DLL,old.dll 和 new.dll,它们都有一个类型为 C 的命名空间 N。您可以这样做:
csc /r:NEW=new.dll /r:OLD=old.dll foo.cs
然后在 foo.cs 你可以说
extern alias NEW;
extern alias OLD;
class D : NEW::N.C { }
class E : OLD::N.C { }
D 会从 new.dll 中的 N.C 继承,E 会从 old.dll 中的 N.C 继承。
这能解决你的问题吗?
【讨论】:
我不确定我是否完全理解您的问题,但这可能会有所帮助。您可以使用 Using 指令来阐明要使用的类。一个例子: 使用 ClassA = OldAssembly.ClassA;
任何对 ClassA 的引用都将引用 OldAssembly。
【讨论】:
您可以将类创建为partial classes,并标记您需要废弃的方法。
这将允许您将类划分为多个文件,并且仍然使用相同的类名。
【讨论】:
用System.ObsoleteAttribute标记你的课程
http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx
using System;
class Program
{
static void Main()
{
MethodA();
}
[Obsolete("Use MethodB instead")]
static void MethodA()
{
}
static void MethodB()
{
}
}
【讨论】:
好的。似乎如果我将同一个类添加到另一个名称空间,那么歧义错误只是我在编译时发生的。 我担心它会在运行时发生,但我测试它并没有问题。
谢谢
【讨论】: