我在一些Java代码转换为C#的过程中,遇到下列奇怪的事情偶然发现: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();
综观原代码,很清楚什么样的这个意图是:
- 声明的接口和嵌套了好静我内该接口的实现(该代码包含IA激活的其他实现,例如, “S2”,“S3”等在此省略)。
- 这种典型的使用场景是将变量分配给该接口的一个特定实现。另外,按照您需要实例化该变量的方式,可以很清楚地了解这些特定实现属于哪个位置 - 以某种方式说,嵌套声明将进一步提高代码的可读性(例如
new IActivation.S1();
明确指出S1是IA激活的具体实现)。
有趣的是,C#不喜欢整个事情的定义方式:“无法创建静态类“IActivation.S1的实例”。有没有人知道如何重构该代码的方法,以便1.和2.会被保留下来?
为什么你需要将类声明为静态? – Morvader
@Morvader:当应用于类时,'static'在Java中的含义与C#中的含义不同。 – cdhowie
新增了[标签:java的],它希望将吸引的人谁知道Java的... – AakashM