В Java внутренний класс static
не имеет неявного доступа к членам своего включающего типа. В C # все вложенные типы не имеют такого доступа к членам своего родительского типа; нет модификатора, который нужно добавить в C #, чтобы вызвать это поведение.
В C #, static
классы abstract sealed
, поэтому они не могут быть ни созданы, ни выведены - это не то же самое значение, что и в Java. Кроме того, интерфейсы не могут содержать собственных объявлений типов.
Попробуйте что-то вроде этого:
public interface IActivation {
double Func(double inputput);
}
public class S1 : IActivation {
public static readonly S1 Instance = new S1();
private S1() { }
public double Func(double input) {
if (input > 0) return 1.0;
return 0.0;
}
}
Если ваша цель состоит в том, чтобы предоставить реализации по умолчанию некоторым «читабельным» способом (хотя я оспариваю, что IActivator.S1()
по своей природе более читабелен ...), тогда вы могли бы создать статический фабричный класс:
public static class Activator
{
public static S1 S1
{
get
{
return S1.Instance;
// Or you could do this if you make the S1 constructor public:
// return new S1();
}
}
}
Однако я оспариваю утверждение, что это более читабельно или полезно. Visual Studio при построении объекта в контексте определенного типа отображает все подтипы этого типа. Поэтому, если вы сделаете это (|
представляет курсор):
IActivator foo = new |
Вы должны получить аккуратный список всех классов в вашей текущей области, которые реализуют IActivotor.