分离库和一个项目中的两个相同的类

时间:2011-09-06 11:45:45

标签: c# class partial

我有两个相同的类,具有不同的属性和不同的库。 我在我的项目中引用这两个库,当我尝试访问第二个库的属性时,我收到错误“无法解析符号”。 如果其中一个类设置被重命名为其他东西,一切正常。似乎编译器在第一个类中搜索属性并忽略具有相同名称的第二个类。我尝试使用partial属性修饰类以将类合并为一个,但它似乎仅在类位于同一个库时才有效。有什么建议吗?

Lib1.dll

   namespace caLibServer
    {
        public partial class Settings
        {
            public static string MyProperty1
             //skip code
        }
    }

Lib2.dll

  namespace caLibClient
    {
        public partial class Settings
        {
            public static string MyProperty2
             //skip code
        }
    }

6 个答案:

答案 0 :(得分:4)

您需要使用命名空间来访问第二个:

caLibClient.Settings.MyProperty2

您使用的partial关键字是无用的,因为这两个类恰好具有相同的名称。他们没有关系。

答案 1 :(得分:1)

如果您想让一个类具有所有属性而不是两个不同的类,则可以使用继承来执行此操作。

例如

 namespace caLibServer
    {
        public class Settings
        {
            public virtual static string MyProperty1
             //skip code
        }
    }

 namespace caLibClient
    {
        public class Settings : caLibServer.Settings
        {
            public static string MyProperty2
             //skip code
        }
    }

现在你可以拥有:

using caLibClient;

Settings.MyProperty1;
Settings.MyProperty2;

否则,您可以使用该类的完整路径来指定您的意思。

例如

caLibServer.Settings.MyProperty1;
caLibClient.Settings.MyProperty2;

这取决于你想要完成的任务。

答案 2 :(得分:0)

尝试使用相同的命名空间。您可以更改其中一个库的默认命名空间。

答案 3 :(得分:0)

  

我有两个相同的类,具有不同的属性和   不同的图书馆。

这句话没有多大意义。

如果它们是两个相同的类,那么它们将没有不同的属性,不同的事实使它们独特。

  

我在项目中引用这两个库,当我尝试时   访问第二个库的属性我得到错误“无法解决   符号”

你需要为我们发布代码来解释你究竟做错了什么,除了你认为两个不同的类(甚至不是彼此继承)的明显事实可以以产生这个错误的方式使用。

  

Any suggestion?

我有一对你不喜欢的人: - )

答案 4 :(得分:0)

使用命名空间完全限定类名。您还可以更轻松地从一个文件引用文件,使用using关键字。

 using Lib2Settings = PC.MyCompany.Project

 public class foo {
     public somemethod() {
         var value1 = caLibClient.Settings.MyProperty1  // fully-qualified
         var value2 = Lib2Settings.MyProperty2          // utilizing the using keyword
     } 
 }

答案 5 :(得分:0)

这取决于尝试使用它们的C#文件中的using语句。

仅假设:

using caLibServer;

尝试Settings.MyProperty1时,会看到caLibServer中的那个。

与“only”类似:

using caLibClient;

Settings.MyProperty1只会看到caLibServer中的那个。

如果同时拥有(无论顺序如何):

using caLibServer;
using caLibClient;

Settings.MyProperty1将完全失败,您必须指定caLibServer.Settings.MyProperty1Settings.MyProperty1

您可以通过以下方式为每个设置别名:

namesoace SomeProjectThatUsesBoth
{
    using Server_Settings = caLibServer.Settings;
    using Client_Settings = caLibClient.Settings;

    // You usage class here
}

然后你可以使用像Server_Settings.MyProperty1Client_Settings.MyProperty1这样的别名(假设你将使用一个长度小于原始命名空间的别名,我这里使用下划线使它显然不常见名称,但您不必这样做。唯一的要求是将它们放在名称空间定义中。)