У меня возник вопрос о генераторах C#. Я хочу сохранить общую переменную типа в моем абстрактном классе, не объявляя этот тип вне класса.Защищенный общий класс - поддерживается ли он?
Ниже приведен образец кода. Обратите внимание, что я не хочу, чтобы классы Param были выставлены снаружи Calc класс.
Заранее спасибо. - Dutta.
abstract class Base { }
abstract class Calc<T> where T : Base
{
protected Param Member; /* how can this be a made a generic declaration
* WITHOUT declaring this class like,
* class Calc<T, P>
* where T : Base
* where P : Param */
protected Calc(Param p)
{
this.Member = p;
}
protected abstract class Param { }
}
class MyBase : Base { }
class MyCalc : Calc<MyBase>
{
public MyCalc() : base(new MyParam()) { }
public void doSomething()
{
base.Member.A++; // fails on compilation
}
private class MyParam : Calc<MyBase>.Param
{
public int A;
public MyParam() { this.A = 0; }
}
}
Почему вы хотите, защищенный класс? Что вы пытаетесь выполнить/предотвратить? Что не работает? То, что у вас есть, выглядит нормально – Thraka
Мне нужен защищенный класс ** Param **, поскольку я хочу, чтобы только классы, полученные из ** Calc **, могли создавать экземпляры и вызывать методы на нем. –
Это другое требование, чем сказать, что вы не хотите, чтобы параметр типа «Param» был «общедоступным». –