0

我在网上搜索但在定义部分类时没有找到有关约束/规则的任何有用信息,我的意思是所有类都可以命名为 Partial 还是某些类不能命名?静态类可以是部分的和所有这些东西,请解释清楚我在面试中被问到这个问题,但我没有任何答案。我真的很想深入了解这一点,我曾经在msdn中找到了一些用于定义部分方法的规则,例如

 1. Partial method declarations must begin with the contextual keyword
 2. partial  and the method must return void. 
 3. Partial methods can have ref  but not out  parameters.
 4. Partial methods are implicitly private, and therefore they cannot be virtual. 
 5. Partial methods cannot be extern , because the presence of the body determines whether they are defining or implementing.
 6. Partial methods can have static and unsafe  modifiers.
 7. Partial methods can be generic.
 8. Constraints are put on the defining partial method declaration, and
    may optionally be repeated on the implementing one.
 9. Parameter and type parameter names do not have to be the same in the
    implementing declaration as in the defining one.
 10. You can make a delegate  to a partial method that has been defined and implemented, but not to a partial method that has only been defined.

上课也有规定吗...

谢谢小伙子

4

2 回答 2

0

老实说,我会不惜一切代价避免使用 partial 关键字。它的存在是因为 VS/MS 想要一种自动生成代码的方法,并且仍然允许开发人员添加他们自己的自定义逻辑。

主要是 Win/WebForms。您可以将控件拖放到屏幕上并使用属性窗口来配置对象。然后,您可以打开“代码背后”并添加您自己的逻辑,并可以完全访问您通过所见即所得添加的所有控件。

除此之外,partials 可以很容易地创建比解决的问题更多的问题。创建看起来好像是面向对象的代码的程序神类太容易了。

于 2012-06-21T10:46:11.630 回答
0

归功于 C# 规范。

partial 修饰符表示类型声明的附加部分可能存在于别处,但这些附加部分的存在不是必需的;具有单个声明的类型包含部分修饰符是有效的。

部分类型的所有部分必须一起编译,以便可以在编译时将这些部分合并为单个类型声明。部分类型特别不允许扩展已编译的类型。

可以使用 partial 修饰符在多个部分中声明嵌套类型。通常,包含类型也使用 partial 声明,并且嵌套类型的每个部分都在包含类型的不同部分中声明。

在委托或枚举声明中不允许使用 partial 修饰符。

属性

部分类型的属性是通过以未指定的顺序组合每个部分的属性来确定的。如果一个属性放在多个零件上,就相当于在类型上多次指定该属性。比如这两部分:

[Attr1, Attr2("hello")]
partial class A {}

[Attr3, Attr2("goodbye")]
partial class A {}

相当于一个声明,例如:

[Attr1, Attr2("hello"), Attr3, Attr2("goodbye")]
class A {}

类型参数的属性以类似的方式组合。

修饰符

当部分类型声明包含可访问性规范(public、protected、internal 和 private 修饰符)时,它必须与包含可访问性规范的所有其他部分一致。如果部分类型的任何部分都不包含可访问性规范,则为该类型提供适当的默认可访问性(第 3.5.1 节)。

类型参数和约束

如果一个泛型类型在多个部分中声明,每个部分都必须声明类型参数。每个部分必须按顺序具有相同数量的类型参数,并且每个类型参数的名称相同。

当部分泛型类型声明包含约束(where 子句)时,约束必须与包含约束的所有其他部分一致。具体来说,包含约束的每个部分都必须具有针对同一组类型参数的约束,并且对于每个类型参数,主约束、辅助约束和构造函数约束集必须是等效的。如果两组约束包含相同的成员,则它们是等效的。如果部分泛型类型的任何部分都没有指定类型参数约束,则类型参数被认为是不受约束的。

这个例子

partial class Dictionary<K,V>
    where K: IComparable<K>
    where V: IKeyProvider<K>, IPersistable
{
    ...
}
partial class Dictionary<K,V>
    where V: IPersistable, IKeyProvider<K>
    where K: IComparable<K>
{
    ...
}
partial class Dictionary<K,V>
{
    ...
}

是正确的,因为包含约束(前两个)的那些部分有效地分别为同一组类型参数指定了同一组主要、次要和构造函数约束。

于 2012-06-21T10:48:16.920 回答