none
Не удается получить значение метода RRS feed

  • Вопрос

  • не удается получить значение метода :

    public double CyclicFrequency()       

    {           

    return 2 * Math.PI * f;       

    }

    из класса CalculationType_E_and_H.cs в методе класса PowerLoss.cs:

    //Глубина скин слоя
             public double DepthSkinLayer()
             {
                 double w = Math.Sqrt(2 / (CyclicFrequency() * Mia() * sigma));
                 Debug.WriteLine("w={0}", CyclicFrequency());
                 return w;
                 
             }

    вот программа подскажите почему не получается это сделать. чтобы я не пытался делать мне в класс PowerLoss.cs постоянно приходит значение 0. если не затруднит объясните почему так и как от этого избавиться.

    прилагаю исходники на VS 2010. 

    http://www.cyberforum.ru/attachments/csharp-beginners/233054d1360309693-%E2%EE%EB%ED%EE%E2%EE%E4%FB.zip

    10 февраля 2013 г. 5:55

Ответы

  • Привет

    У вас проблема в том что 2 переменные из класса PowerLoss не инициализированы. Вы немного неправильно понимаете наследование - оно расширяет и может переопределять поведение базового класса, но это не значит что вам не нужно инициализировать переменные базового класса, которые требуются для расчетов.

    Вам нужно добавить в конструктор класса PowerLoss два параметра -  f и mi:

    public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi)

    Также в базовом классе CalculationType_E_and_H необходимо изменить модификатор доступа к этим полям с private на protected:

    public CalculationType_E_and_H()
            { }
            double eo = 8.85 * Math.Pow(10, -12);//Электрическая постоянная
            double mio = 4 * Math.PI * Math.Pow(10, -7); //Магнитная постоянная
            protected double e, mi, f; // Электрическая приницаемость, магнитная проницаемость, частота


    После этого в конструкторе PowerLoss выполнить установку значений для этих полей:

             public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi)   
             {
                 this.sigma = sigma;
                 this.m = m;
                 this.n = n;
                 this.a = a;
                 this.b = b;
                 this.l = l;
                 this.f = f;
                 this.mi = mi;
            }

    Последнее - в классе формы, где создаете объект PowerLoss передать, добавленные параметры:

    PowerLoss loss = new PowerLoss(sigma, m, n, a, b, l, f, mi);

    Теперь расчет потерь должен выполняться нормально и вы получите результат.


    Для связи [mail]

    12 февраля 2013 г. 13:59

Все ответы

  • Что вы пытаетесь сделать пока не совсем понятно, можете описать перефразировав.
    10 февраля 2013 г. 6:28
    Модератор
  • есть ссылка на программу. разместил ее на другом сайте потом что не знаю как здесь прикреплять файл. Та дело в том что есть три класса

    CalculationSizeWaveguide.cs

    CalculationType_E_and_H.cs

    PowerLoss.cs

    наследуются они так

    CalculationType_E_and_H() : CalculationSizeWaveguide()

    потом

    PowerLoss() : CalculationType_E_and_H()

    проблема в том что методы класса CalculationSizeWaveguide.cs отлично наследуются классом CalculationType_E_and_H.cs, а вот методы класса CalculationType_E_and_H.cs передают нулевые значения в класс PowerLoss.cs. При учете того что все методы класса CalculationType_E_and_H.cs возвращают значения отличные от нуля! пробовал получить и через экземпляр класса и через base.

    base.CyclicFrequency()
    CalculationType_E_and_H() qwert = new CalculationType_E_and_H();
    все равно передается 0. В чем проблема? 



    • Изменено Oxodys 10 февраля 2013 г. 8:03
    10 февраля 2013 г. 8:02
  • Попробуйте исправить ссылку, а то она не рабочая, чтобы можно было посмотреть.
    10 февраля 2013 г. 8:09
    Модератор
  • http://www.cyberforum.ru/csharp-beginners/thread781833.html по этой ссылке лежит вопрос и программа

    11 февраля 2013 г. 6:31
  • Привет

    У вас проблема в том что 2 переменные из класса PowerLoss не инициализированы. Вы немного неправильно понимаете наследование - оно расширяет и может переопределять поведение базового класса, но это не значит что вам не нужно инициализировать переменные базового класса, которые требуются для расчетов.

    Вам нужно добавить в конструктор класса PowerLoss два параметра -  f и mi:

    public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi)

    Также в базовом классе CalculationType_E_and_H необходимо изменить модификатор доступа к этим полям с private на protected:

    public CalculationType_E_and_H()
            { }
            double eo = 8.85 * Math.Pow(10, -12);//Электрическая постоянная
            double mio = 4 * Math.PI * Math.Pow(10, -7); //Магнитная постоянная
            protected double e, mi, f; // Электрическая приницаемость, магнитная проницаемость, частота


    После этого в конструкторе PowerLoss выполнить установку значений для этих полей:

             public PowerLoss( int sigma, int m, int n, double a, double b, double l, double f, double mi)   
             {
                 this.sigma = sigma;
                 this.m = m;
                 this.n = n;
                 this.a = a;
                 this.b = b;
                 this.l = l;
                 this.f = f;
                 this.mi = mi;
            }

    Последнее - в классе формы, где создаете объект PowerLoss передать, добавленные параметры:

    PowerLoss loss = new PowerLoss(sigma, m, n, a, b, l, f, mi);

    Теперь расчет потерь должен выполняться нормально и вы получите результат.


    Для связи [mail]

    12 февраля 2013 г. 13:59