Почему бы не объявить внутренний интерфейс (или внутренний абстрактный класс), чтобы он не был инстанциональным, а затем частным внутренним классом, который реализует интерфейс?
Что-то вроде
using System;
namespace test {
class Outer {
public interface IInner {
void SayHello();
}
private class Inner : IInner {
public void SayHello() {
Console.WriteLine("Hello");
}
}
public IInner MakeInner() {
return new Inner();
}
}
class Program {
static void Main(string[] args) {
Outer x = new Outer();
x.MakeInner().SayHello();
}
}
}
В этом случае только Outer
может создавать конкретные Inner
объекты, в то время как другие классы должны вызывать метод MakeInner
.
Обратите внимание, что таким же образом вы также применяете ограничение для классов в одной и той же сборке.
Внутренний, похоже, работает, я хотел бы иметь доступ только к внешнему классу, но это достаточно хорошо. Спасибо –