我有两个相同的类,具有不同的属性和不同的库。 我在我的项目中引用这两个库,当我尝试访问第二个库的属性时,我收到错误“无法解析符号”。 如果其中一个类设置被重命名为其他东西,一切正常。似乎编译器在第一个类中搜索属性并忽略具有相同名称的第二个类。我尝试使用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
}
}
答案 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.MyProperty1
或Settings.MyProperty1
。
您可以通过以下方式为每个设置别名:
namesoace SomeProjectThatUsesBoth
{
using Server_Settings = caLibServer.Settings;
using Client_Settings = caLibClient.Settings;
// You usage class here
}
然后你可以使用像Server_Settings.MyProperty1
或Client_Settings.MyProperty1
这样的别名(假设你将使用一个长度小于原始命名空间的别名,我这里使用下划线使它显然不常见名称,但您不必这样做。唯一的要求是将它们放在名称空间定义中。)