【问题标题】:Ambiguous class name模棱两可的类名
【发布时间】:2010-04-29 16:11:13
【问题描述】:

如果有一个新项目(ProjNew),我想在其中放置几个​​在其他项目(ProjOld)上的类。

问题是我想维护标记为 Obsolete 的旧类以避免运行我的所有项目并检查它们是否使用它。

但是这样可能会抛出一个模棱两可的类名错误,因为我没有通过命名空间显式调用。

有没有办法在过时的情况下说明在歧义情况下使用什么程序集?

【问题讨论】:

    标签: c# class obsolete ambiguous


    【解决方案1】:

    不完全清楚你在问什么,但我还是会试一试。

    假设您有两个 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 继承。

    这能解决你的问题吗?

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您的问题,但这可能会有所帮助。您可以使用 Using 指令来阐明要使用的类。一个例子: 使用 ClassA = OldAssembly.ClassA;

      任何对 ClassA 的引用都将引用 OldAssembly。

      【讨论】:

        【解决方案3】:

        您可以将类创建为partial classes,并标记您需要废弃的方法。

        这将允许您将类划分为多个文件,并且仍然使用相同的类名。

        【讨论】:

        • 部分类不跨越程序集边界。
        • 啊!我没有意识到,但这是有道理的。为 Eric 的提醒干杯。
        【解决方案4】:

        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()
            {
            }
        }
        

        【讨论】:

        • 这是否解决了 OP 需要有 2 个同名的类?可以将一个类标记为过时,同时在同一命名空间中使用另一个具有相同名称的类吗? (从外观上看,您的示例演示了将类成员标记为过时,而不是类本身)
        【解决方案5】:

        好的。似乎如果我将同一个类添加到另一个名称空间,那么歧义错误只是我在编译时发生的。 我担心它会在运行时发生,但我测试它并没有问题。

        谢谢

        【讨论】:

          猜你喜欢
          • 2011-09-07
          • 2011-03-13
          • 2012-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多