RAM*_*Me0 59 c# silverlight class partial
我可以在不同的命名空间中创建部分类吗?它会正常工作吗?例如:
将Class1.cs
namespace name1
{
public partial class Foo
{
Bar1(){
return 10;
}
}
}
Run Code Online (Sandbox Code Playgroud)
class2.cs
namespace name1.name2
{
public partial class Foo
{
Bar2(){
return 100;
}
}
}
Run Code Online (Sandbox Code Playgroud)
main.cs
using name1;
using name1.name2;
namespace mainClass
{
public class mainClass
{
Foo classFoo = new Foo();
int Count = classFoo.Bar1() + classFoo.Bar2();
// Will Count = 110?
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能让它发挥作用?(如果我的例子不正确)
Cod*_*lla 87
类的名称包含它的命名空间,所以name1.Foo和name1.name2.Foo是两个完全不同的类型.所以对你的问题的简短回答是:不.
为什么你需要做这样的事情?
Far*_* S. 12
在实现部分类时,需要考虑以下几点: -
在部分类的每个部分中使用partial关键字.
部分类的每个部分的名称应该相同,但是部分类的每个部分的源文件名可以是不同的.
部分类的所有部分都应位于同一名称空间中.
部分类的每个部分应该在同一个程序集或DLL中,换句话说,您不能在不同类库项目的源文件中创建部分类.
部分类的每个部分都具有相同的可访问性.(如私人,公共或受保护)
如果在部分类上继承类或接口,则它将在部分类的所有部分上继承.
如果部分类的一部分被密封,则整个类将被密封.
如果部分类的一部分是抽象的,则整个类将被视为抽象类.
这不行.编译器会Foo classFoo = new Foo();在行上给出一个模糊的名称错误.要使部分类起作用,它们必须位于同一名称空间中,因为名称空间实际上是该类型的完全限定名称的一部分.
另外,对于静态类,您可以在新的 C# 6.0 的帮助下使用静态功能来实现类似的东西。
考虑:
namespace SomeLogic1
{
public static class Util
{
public static int Bar1()
{
return 1;
}
}
}
namespace SomeLogic2
{
public static class Util
{
public static int Bar2()
{
return 2;
}
}
}
namespace GeneralStuff
{
using SomeLogic1;
using SomeLogic2;
public class MainClass
{
public MainClass()
{
// Error CS0104
// 'Util' is an ambiguous reference between 'SomeLogic1.Util' and 'SomeLogic2.Util'
var result = Util.Bar1() + Util.Bar2();
}
}
}
Run Code Online (Sandbox Code Playgroud)
没错,就是编译不通过,错误信息很清楚。要解决这种情况,您可以直接指定名称空间(但据我了解,您不希望这样做):
namespace GeneralStuff
{
public class MainClass
{
public MainClass()
{
var result = SomeLogic1.Util.Bar1() + SomeLogic2.Util.Bar2();
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以通过以下方式应用静态功能:
namespace GeneralStuff
{
using static SomeLogic1.Util;
using static SomeLogic2.Util;
public class MainClass
{
public MainClass()
{
var result = Bar1() + Bar2();
}
}
}
Run Code Online (Sandbox Code Playgroud)
也许对某些帮助器/实用程序类执行此操作是可以的。但正如其他人所注意到的那样,部分类并不是正确的方法。