none
Вычисление параметра, передаваемого в базовый класс RRS feed

  • Вопрос

  • Допустим, есть два класса Base и Derived. Base является родителем для Derived. Я хочу сделать следующее:

    Derived( int a ) : base( f(a) )
    {
      // Здесь я хочу использовать результат f(a)
    }
    
    static int f(a)
    {
       return +100500; // Некоторые сложные вычисления
    }

    Можно ли как-то в конструкторе Derived использовать результат вызова f(a) без дополнительного вызова функции? То есть, сделать нечто такого вида:

    Derived( int a ) : base( int param = f(a) )
    {
       // use "param"
    }

    Подозреваю, что нельзя :) И поэтому возникает ещё один вопрос:

    Может ли наличие подобных вызовов свидетельствовать о неправильном дизайне классов?

    15 октября 2012 г. 11:55

Ответы

  • Можете:

    namespace ConsoleApplication
    {
      class Program
      {
        static void Main(string[] args)
        {
          B b = new B(5);
        }
      }
      public class A
      {
        protected int a;
        public A(int a)
        {
          this.a = a;
        }
      }
      public class B : A
      {
        public B(int a)
          : base(f(a))
        {
          int b = base.a;
        }
        static int f(int a)
        {
          return +100500; // Некоторые сложные вычисления
        }
      }
    }

    • Помечено в качестве ответа tulosba 15 октября 2012 г. 17:39
    15 октября 2012 г. 13:36
    Модератор