Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个相同的类分别位于不同的库和一个项目中_C#_Class_Partial - Fatal编程技术网

C# 两个相同的类分别位于不同的库和一个项目中

C# 两个相同的类分别位于不同的库和一个项目中,c#,class,partial,C#,Class,Partial,我有两个相同的类,它们具有不同的属性,位于不同的库中。 我在我的项目中引用了这两个库,当我试图访问第二个库的属性时,我得到错误“无法解析符号”。 如果将某个类设置重命名为其他设置,则一切正常。编译器似乎在第一个类中搜索属性,而忽略具有相同名称的第二个类。我试图用partial属性装饰类以将类合并为一个类,但似乎只有当类位于同一个库中时,这才有效。有什么建议吗 Lib1.dll namespace caLibServer { public partial class

我有两个相同的类,它们具有不同的属性,位于不同的库中。 我在我的项目中引用了这两个库,当我试图访问第二个库的属性时,我得到错误“无法解析符号”。 如果将某个类设置重命名为其他设置,则一切正常。编译器似乎在第一个类中搜索属性,而忽略具有相同名称的第二个类。我试图用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
        }
    }

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

caLibClient.Settings.MyProperty2

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

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

如果希望一个类具有所有属性,而不是两个不同的类,则可以使用继承来完成此操作

例如

现在您可以:

using caLibClient;

Settings.MyProperty1;
Settings.MyProperty2;
否则,您可以使用类的完整路径来指定所指的路径

例如

这取决于你想完成什么

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

这种说法没有多大意义

如果它们是两个相同的类,那么它们就不会有不同的属性,不同的属性使得它们是唯一的

我在项目中引用了这两个库,当我尝试 第二个库的访问属性I get error“无法解析 符号”

除了您认为两个不同的类(甚至没有相互继承)可以以产生此错误的方式使用之外,您还需要为我们发布代码来解释您到底做错了什么

有什么建议吗?


我有几个你不喜欢的名字:-)

用名称空间完全限定类名。您还可以使用关键字更方便地从一个文件引用到另一个文件


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

仅假设:

using caLibServer;
尝试
Settings.MyProperty1
时,将在
caLibServer
中看到该设置

与“仅”类似:

Settings.MyProperty1
将只在
caLibServer
中看到一个

如果两者都有(无论顺序如何):

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

但是,您可以通过执行以下操作为每个别名设置别名:

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

    // You usage class here
}

然后您可以使用别名,如
Server\u Settings.MyProperty1
Client\u Settings.MyProperty1
(假设您使用的别名长度小于原始名称空间的长度,我在这里使用下划线来说明这些名称不是常用名称,但您不必这样做。唯一的要求是在名称空间定义中包含它们。).

FYI,分部类不是这样工作的。
caLibServer.Settings
caLibClient.Settings
完全不同-两者不能组合成一个类,因为它们是两种不同的类型。除非在每个命名空间中都有相同类的其他部分,否则可能不应该有
partial
关键字完全可以。而且,如果没有更多关于为什么要这样做(即,你想要实现什么)的信息,提供替代方案是不可行的。@Jon只是想学习C;:)建议的类继承解决方案看起来很有趣!这个想法来自一个案例,我想在类库中实现一个实用类的一些基本功能,供所有使用它的项目使用,但随后需要为每个项目添加一些特定的功能,并认为创建具有类似功能的第二个类可能被认为是故意的,于是,继承人给出了答案。
 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
     } 
 }
using caLibServer;
using caLibClient;
using caLibServer;
using caLibClient;
namesoace SomeProjectThatUsesBoth
{
    using Server_Settings = caLibServer.Settings;
    using Client_Settings = caLibClient.Settings;

    // You usage class here
}