C# girilen yazıya göre void çalıştırma

The User 0

Hectopat
Katılım
14 Eylül 2020
Mesajlar
2.117
Çözümler
42
Daha fazla  
Sistem Özellikleri
HP Laptop 15-da1083nt
Intel Core i5-8265U @ 1.60GHz
Intel UHD Graphics 620
NVidia GeForce MX130
WD NVMe 480GB
A-Data 8GB CL17 2400MHz
HP 22es 1080p 60Hz
HyperX PulseFire Raid
Cinsiyet
Erkek
Meslek
Öğrenci
Bir konsol uygulamasında kullanıcıdan istenen yazı sonucu o kodu çalıştırmak istiyorum. Yani eğer kullanıcı konsola "about" girerse "Apps.About.Start();" komutunun çalışmasını istiyorum. Aynı şey başka komutlar için de olur. Yani kullanıcı "deneme" girerse "Apps.Deneme.Start();" komutunun çalışmasını istiyorum. Kodum şu şekilde:

[CODE lang="csharp" title="KODUM"]
public static void runCMD(string lineCmd)
{
if (lineCmd == "")
{
Console.WriteLine("Blank command. Use ? command to get help.");
}
else
{
//KODLAR BURAYA GELSİN
}

/*YAPMAK İSTEDİĞİM BUNLARI KISALTMAK. ÖRNEK OLARAK AZ VERDİM AMA YAKLAŞIK 50 TANE KOMUT VAR.


string input = lineCmd;

if (input == "about")
{
Apps.About.Start();
}
else if (input == "echo")
{
Apps.Echo.Start();
}
else if (input == "math")
{
Apps.Math.Start();
}*/
}
[/CODE]
 
Son düzenleyen: Moderatör:
Ama ne yazık ki ben bunu konsol projesi olarak çalıştırdığım için bende this yok. Bu yüzden hata veriyor.
Konsol projelerinde sınıf olmuyor mu? Çok saçma. Microsoft bu kadar aptal olamaz.
Bir arkadaşıma sordum ve var dedi.

Paylaştığın şeylerden anladığım kadarıyla zaten var olan metot çağrılıyor. Ne anlamı var?
Kullandığın metodun adı senin için bu kadar önemli mi? Her halükarda içini sen dolduruyorsun gibi görünüyor.

Hala önceki sorumu cevaplamadın. Ben armut yazınca ne olacak? Armut metodunu sen mi yazmış olacaksın, ben mi yazacağım, yoksa armut yok mu diyecek?
 
Konsol projelerinde sınıf olmuyor mu? Çok saçma. Microsoft bu kadar aptal olamaz.
Bir arkadaşıma sordum ve var dedi.

Paylaştığın şeylerden anladığım kadarıyla zaten var olan metot çağrılıyor. Ne anlamı var?
Kullandığın metodun adı senin için bu kadar önemli mi? Her halükarda içini sen dolduruyorsun gibi görünüyor.

Hala önceki sorumu cevaplamadın. Ben armut yazınca ne olacak? Armut metodunu sen mi yazmış olacaksın, ben mi yazacağım, yoksa armut yok mu diyecek?
Sınıf var ama this yani Form yok.
 
Apps klasörü şu şekilde:
1619190672941.png


Bu apps klasörüne kullanıcının erişme imkanı var. Kullanıcı buraya kendi dosyasını atarsa ve konsoldan dosyanın adını yazarsa onu da çalıştırabilsin istiyorum.
 
Apps klasörü şu şekilde:
Eki Görüntüle 989058

Bu apps klasörüne kullanıcının erişme imkanı var. Kullanıcı buraya kendi dosyasını atarsa ve konsoldan dosyanın adını yazarsa onu da çalıştırabilsin istiyorum.
Compile edilebilen bir dille bu dedigini yapamazsin. Kendi dosyasini atip onu da kodun geri kalaniyla compile etmesi gerekiyor.
 
Stack Overflow'da gördüğüm örnek:
C#:
private void ButtonClick(){
    string goVoid;
    goVoid = textBox1.Text; //Kullanıcının"testVoid" yazdığını düşünelim.
    goVoid();
}

testVoid(){
    //Kod
}

Bu paylaştığım kod benim birinin Windows.Forms'ta yapmak istediği şey ve buna cevap olarak şu kod gelmiş:

C#:
string methodName = "testVoid";
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(methodName);
theMethod.Invoke(this, null);

Ama ne yazık ki ben bunu konsol projesi olarak çalıştırdığım için bende this yok. Bu yüzden hata veriyor.

Bu link: Call a void from a string
Bal gibi de çalıştı. Ama ne gerek var buna anlamadım. Her halikarda sen tanımlayacaksın metodları. Direk if ile kontrol et sonra çalıştır işte metodu :D
 

Dosya Ekleri

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    24,1 KB · Görüntüleme: 29
Apps klasörü şu şekilde:
Eki Görüntüle 989058

Bu apps klasörüne kullanıcının erişme imkanı var. Kullanıcı buraya kendi dosyasını atarsa ve konsoldan dosyanın adını yazarsa onu da çalıştırabilsin istiyorum.
Ayrıca şu anda klasörde olmayan başka .cs dosyaları da var. Onları da atacağım. klasöre attığım her dosya için ayrı olarak çalıştıran kod yazmak yerine klasöre atılan bir dosyayı kod içinde çalıştırmak için kullanıcı adını girsin istiyorum. Mesela erentronik.cs olarak bir dosya var diyelim ve şöyle:

C#:
class erentronik
    {
        public static void Start() 
        {
           string yazi = "Deneme";
            Console.WriteLine("Erentronik");
            Console.WriteLine(yazi);
        }
    }

Ben konsola erentronik yazdığımda bunun içindeki komutları yapmasını istiyorum. Yani konsola erentronik yazdığımda konsolun geri dönüt olarak Erentronik ve Deneme söylemesini istiyorum.
Bal gibi de çalıştı. Ama ne gerek var buna anlamadım. Her halikarda sen tanımlayacaksın metodları. Direk if ile kontrol et sonra çalıştır işte metodu :D
Bunların dışında başka bir kişi de bu uygulamayı kullanacak ve denemek isteyecek. Kendi kodunu çalıştırmak isteyen biri bana mesaj atıp onun yazdığı kod için de if eklememi istemeyi tercih etmez.
 
Bunların dışında başka bir kişi de bu uygulamayı kullanacak ve denemek isteyecek. Kendi kodunu çalıştırmak isteyen biri bana mesaj atıp onun yazdığı kod için de if eklememi istemeyi tercih etmez.
Bitwise hocamında dediği gibi bunu C# ile yapamazsın ki. C# derlenmeye ihtiyaç duyar. Başkası dosya attığında mecburen tekrar programı derlemen gerekiyor.
Evet Aslında bir nevi dediğin doğru if eklemek yerine tek bir komutla istediğin bir class daki bir metodu çalıştırabilirsin. Yapılabilir. Ancak dışarıdan dosya eklenmez. Bunu python gibi yorumlanan dillerde yapabilirsin.
 
Bitwise hocamında dediği gibi bunu C# ile yapamazsın ki. C# derlenmeye ihtiyaç duyar. Başkası dosya attığında mecburen tekrar programı derlemen gerekiyor.
Evet Aslında bir nevi dediğin doğru if eklemek yerine tek bir komutla istediğin bir class daki bir metodu çalıştırabilirsin. Yapılabilir. Ancak dışarıdan dosya eklenmez. Bunu python gibi yorumlanan dillerde yapabilirsin.
Tamam dışardan eklenmese bile bu koda ekleyeceğim bütün Class'lar için ayrı if koymak mantıksız.
Bal gibi de çalıştı.
Bende this'lerin altını kırmızı ile çiziyor. Şu hatayı veriyor: CS0026
 
Son düzenleme:

Geri
Yukarı