【发布时间】:2011-08-22 11:20:47
【问题描述】:
我正在将一些 Java 代码转换为 C#,偶然发现了以下奇怪的事情:
public interface IActivation {
public abstract double func(double inputput);
public static class S1 : IActivation {
public double func(double input) {
if (input > 0) return 1.0;
return 0.0;
}
}
}
SomewhereElse(用法):
protected IActivation activation = new IActivation.S1();
看原始代码,很清楚这是什么意图:
- 声明一个接口并在其中嵌套该接口的几个静态实现(代码包含 IActivation 的其他实现,例如“S2”、“S3”等,此处省略)。
- 典型的使用场景是为该接口的一个特定实现分配一个变量。此外,顺便说一下,您需要实例化该变量,这些特定实现属于何处非常清楚 - 可以说,嵌套声明将进一步提高代码的可读性
(例如
new IActivation.S1();明确表示 S1 是 IActivation 的特定实现)。
有趣的是,C# 不喜欢整个定义的方式:“无法创建静态类 'IActivation.S1”的实例。有谁知道如何重构该代码以保留 1. 和 2. 的方法?
【问题讨论】:
-
为什么需要将类声明为静态的?
-
@Morvader:
static,当应用于类时,在 Java 中的含义与在 C# 中的含义不同。 -
添加了java,希望能从了解Java的人那里得到答案...