Лучший отвечающий
Не удается получить значение метода

Вопрос
-
не удается получить значение метода :
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]
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 14 февраля 2013 г. 9:27
- Помечено в качестве ответа Abolmasov Dmitry 20 февраля 2013 г. 10:11
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]
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 14 февраля 2013 г. 9:27
- Помечено в качестве ответа Abolmasov Dmitry 20 февраля 2013 г. 10:11
12 февраля 2013 г. 13:59