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