Loading...
ph.kolarov avatar ph.kolarov 63 Точки

[Technical Issue] OOP - Статичен метод в конструктор ?

Може ли някой да ми каже дали мога да извикам да статичен метод в конструктор и ако може как, защото ми дава грешка... и не намирам нищо конкретно ??

пример:

private int Number;

private Class mName;

Public SomeName(int number, Class MName){

this.Numbеr = number;

this.mName = MName

}

Class nameOfClass = new Class(5, Class.Method);

Тагове:
0
C# OOP Basics 04/02/2015 17:45:10
mihayloff14 avatar mihayloff14 824 Точки

Мисля че може да подадеш метод към конструктор чрез делегат.

Не съм сигурен какво точно означават нещата, които си болднал, но статичен метод не се извиква с this.

Ако искаш да извикаш статичен метод от класа в който е дефиниран, просто пишеш името на метода, а ако искаш от друг клас - SomeClass.StaticMethod. Въпреки това, е препоръчително да се изписва и името на класа пред статичния метод дори когато го викаш от класа в който се намира.

1
03/02/2015 21:24:03
vladislav.karamfilov avatar vladislav.karamfilov 1123 Точки

Конструкторът е по-специален инстанционен метод, което веднага води до заключението, че не можеш да ползваш статични методи в него.

5
stefoto avatar stefoto 51 Точки

Къде ти е статичния метод, който искаш да извикаш в конструктора?

Иначе можеш да го извикаш разбира се с /Име на клас/./Име на метод/. 

Също така спазвай за имена на променливи camel case convention, а за имена на методи pascal case convetion. 

До колкото виждам това, което трябва да направиш е this.mName = Class.Method, въпреки че не виждам логиката... 

Правилното е this.mName = mName, a после когато правиш инстанция на този обект можеш да извикаш статичен метод в конструктора.

0
03/02/2015 22:33:44
ph.kolarov avatar ph.kolarov 63 Точки

Да речем, че имам два статични метода в даден клас. Искам при създаване на новия клас да викам по избор един от двата метода. Въпроса е, че синктактично ми бяга. Както и да сложа класа в конструктора си дава грешка. Но до колкото разбирам то и не може да бъде викан през конструктор както каза Владо.... 

Stef, за имената си прав... , но навик...

0
03/02/2015 23:11:36
RoYaL avatar RoYaL Trainer 6849 Точки

При създаването на новия клас? Или при създаването на новия обект?

Всъщност, или има нещо супер сложно, което не разбирам или е повече от common-sense това, което искаш да направиш?

Ето ти го класа с двата статични метода и конструктор

class Test
{
    public Test(String whichMethodToCall)
    {
        if (whichMethodToCall == "first") 
        {
            FirstMethod ();
        } 
        else 
        {
            SecondMethod ();
        }
    }

    static void FirstMethod() 
    {
        Console.WriteLine ("First static method called");
    }

    static void SecondMethod() 
    {
        Console.WriteLine ("SECOND static method called");
    }
}

 

Ето ти викането от друг клас

class Program
{
    static void Main()
    {
        Test firstInstance = new Test ("first");
        Test secondInstance = new Test ("other");
    }
}

Още в момента на създаването на обект от тип Test на който си подал "first" се извиква FirstMethod(). В останалите случаи (secondInstance) се вика SecondMethod();

Това на конзолата продюсна:

First static method called
SECOND static method called

 

 

 

2
ph.kolarov avatar ph.kolarov 63 Точки

Royal, прав си, че не се изразих правилно и благодаря! Определено ме разбра какво исках да направя и това е доста добро решение.

0
g.stoyanov avatar g.stoyanov 776 Точки

Самата концепция на ООП не позволява такива неща.

 

1. this се използва само за елементи на инстанции на даден клас - един вид казва вземи ми елемента на инстанцията. Няма как да вземе статичен елемент тъй като той няма инстанция, той живее самостоятелно.

2. Сподели повече информация за случая - защо трябва да подаваш/използваш статичен метод в конструктора на инстанционен клас, защо си стигнал до този извод, с две думи дай един прост цялостен пример за проблема който искаш да решиш.

 

Ето едно примерно използване на статичен метод в конструктора на класа (за първи път ми се налага да използвам такова нещо :)), просто поради липса на повече информация не знам точно какъв ти е въпроса и гадая - май всички гадаем :)

 

П.С.: Сега се сещам че единствената причина за такова нещо да се прави е ако имаме статичен клас със методи които правят някаква обща/фундаментална валидация на данните - примерно метод CheckIsPrime. Един вид за премахването на дублиране на кода да се ползват такива методи - тази проверка може да я ползваш навсякъде, не е строго предназначена за класа който ползваш.

0
03/02/2015 23:56:05
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Статичен метод можеш да извикаш от конструктор, от пропърти и от инстанционен метод.

Грешката, която ти дава е може би от това, че се опитваш да ползваш инстанционни променливи в него.

Статичен метод в нестатичен клас няма право да бара по нищо, което не е статично. Това не означава, че не можеш да му подаваш нестатични променливи като параметри. Въпроса е, че директно не става.

Пример

1
04/02/2015 12:06:47
ph.kolarov avatar ph.kolarov 63 Точки

Супер е примерчето, което си дал. Определено би ми свършило работа.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.