gpt4 book ai didi

c# - 拆分/组合部分方法

转载 作者:IT王子 更新时间:2023-10-29 04:45:47 24 4
gpt4 key购买 nike

我了解部分方法可用于跨多个文件拆分方法的定义。我很好奇是否允许跨多个文件的每个方法定义都包含代码?

例如,假设我有一个方法 private partial void Foo()。假设我已经在文件 A 和文件 B 中定义了它。这两个实例是否都可以在方法中包含代码,或者只是一个或另一个?我想如果允许这样做我会感到惊讶。

最佳答案

不,你不能。如果可以,当您调用 Foo() 时,哪个代码会先执行?如果两个版本都处理(和修改)全局状态,那么了解执行顺序将非常重要。

无论如何,这没有意义。所以不,你不能

讨厌的例子1

作为从这种可能性中出现的不稳定行为的潜在肮脏的一个简单示例,假设您可以,并且假设您有以下代码:

public partial class MyClass {
private int count = 0;
public partial void NastyMethod() {
count++;
}
}

public partial class MyClass {
public partial void NastyMethod() {
Console.WriteLine(count);
}
}

当您调用 NastyMethod() 时,它会打印什么值?没意义!

讨厌的例子2

现在又是一个奇怪的问题。参数怎么办?并返回值?

public partial class MyClass2 {
public partial bool HasRealSolution(double a, double b, double c) {
var delta = b*b - 4*a*c;
return delta >= 0;
}
}

public partial class MyClass2 {
public partial void HasRealSolution(double a, double b, double c) {
return false;
}
}

现在,如何理解这段代码?在调用 HasRealSolution(1, 2, 1) 之后我们应该考虑哪个返回值?一个方法有 2 个不同的、同时的返回值* 怎么可能?我们不处理 nondeterministic finite automata !

对于那些认为在这个假设的世界中我不存在的部分方法应该是 void 的人,请将 return 替换为在该类的某个私有(private)字段上设置值.效果几乎一样。

* 注意我这里说的不是一个由两个值组成的单一返回值,比如一个元组。我在这里谈论两个返回值。 (???)

关于c# - 拆分/组合部分方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com