Çözüldü C# nesne atama nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Primearc

Hectopat
Katılım
3 Ocak 2021
Mesajlar
1.489
Makaleler
3
Çözümler
13
Yer
Matrix
Ufak bir komut satırı programı yaptım. Sınıfı oluşturdum. Özelliklerini ve metotlarını girdim. Bir tane nesne atamak istiyorum ama atayamıyorum. Kod editörüm (VSC) sınıfı görmüyor.
[CODE lang="csharp" title="Program.cs"]/*
Uygulama: Quiz

Kullanıcıya çeşitli sorular sorulur ve kullanıcı bunları cevaplar. Kullanıcının skoru hesaplanır ve son adımda bu skor gösterilir
*/


using System;

namespace Quiz
{

class Quiz
{

public Quiz(var question, var choises,var answers) { //Constructer
this.Question = question;
this.Choises = choises;
this.Answers = answers;
}
//Properties
private string[] Question;
private string[] Choises;

private string[] Answers;

private byte point = 0;

//Methods
private void showQuestion(byte i) {


Console.WriteLine($"Soru {i+1}: ");
Console.WriteLine(this.Questions);
}

private void showChoises() {
foreach (var item in Choises)
{
Console.Write(" "+item+",");
}

}

private void calculateScore(byte i) {
var a = Console.ReadLine();

if(a.ToLower == this.Answers.ToLower)
this.point++;
else
this.point--;

}

private void showScore() {
Console.WriteLine(this.point);
}



// Public Main Method
public void showQuiz() {
for (byte i = 0; i < Questions.Length; i++)
{
showQuestion(i);
showChoises();
calculateScore(i);
}
showScore();
}
}


}
class Program
{
static void Main(string[] args)
{



}
}[/CODE]
 
Son düzenleyen: Moderatör:
Çözüm
Evet, C# ' da yeniyim. Alıştırma için yaptım.
O zaman şunu belirtmekte fayda var, ne oluşturursanız oluşturun bir namespace içinde olmalı.

Programın çalışması için bir Main metodu olmalı ki siz bu metodu namespace dışında tanımlamışsınız. Temel olarak görünüm aşağıdaki gibi olmalı. Aynı namespace içindeki sınıflar için erişim belirleyicisi vermenize gerek yok.

[CODE lang="csharp" title="C#"]using System;

namespace Quiz{
class Quiz{
//kodlar
}

static void Main(string[] args){
Quiz q = new Quiz();
//kodlar
}
}[/CODE]
Sınıfı ve metodları public yapın.

Düzeltme yapayım, kodu biraz inceledim.

Kodda constructor içinde parametreleri var olarak almışsınız fakat bu çalışmaz. Parametrede ne istiyorsanız (ki bu string[]) onu almanız gerekmekte.

[CODE lang="csharp" title="Constructor" highlight="1"]public Quiz(string[] questions, string[] choises, string[] answers)
{
this.Questions = questions;
this.Choises = choises;
this.Answers = answers;
}[/CODE]

Bir de calculateScore() metodunda a.ToLower derken parantezi eklememişsiniz. Çağırdığınız bir metod olduğu için parantez eklemek zorundasınız.

[CODE lang="csharp" title="Calculate Score Metodu" highlight="5"]private void calculateScore(byte i)
{
var a = Console.ReadLine();

if (a.ToLower() == this.Answers.ToLower())
this.point++;
else
this.point--;

}[/CODE]

Son olarak C# adlandırma kuralında tüm metodların her kelimesi büyük harfle başlar. Yani örnek verirsem metod adı calculateScore() değil CalculateScore() olmalıydı.
 
Son düzenleme:
cunstructor yerine class oluşturduğun satırı public yapman gerekli.
İşe yaramadı. Class satırının başına public koymaktan bahsettiniz değil mi?
Sınıfı ve metodları public yapın.

Düzeltme yapayım, kodu biraz inceledim.

Kodda constructor içinde parametreleri var olarak almışsınız fakat bu çalışmaz. Parametrede ne istiyorsanız (ki bu string[]) onu almanız gerekmekte.

[CODE lang="csharp" title="Constructor" highlight="1"]public Quiz(string[] questions, string[] choises, string[] answers)
{
this.Questions = questions;
this.Choises = choises;
this.Answers = answers;
}[/CODE]

Bir de calculateScore() metodunda a.ToLower derken parantezi eklememişsiniz. Çağırdığınız bir metod olduğu için parantez eklemek zorundasınız.

[CODE lang="csharp" title="Calculate Score Metodu" highlight="5"]private void calculateScore(byte i)
{
var a = Console.ReadLine();

if (a.ToLower() == this.Answers.ToLower())
this.point++;
else
this.point--;

}[/CODE]

Son olarak C# adlandırma kuralında tüm metodların her kelimesi büyük harfle başlar. Yani örnek verirsem metod adı calculateScore() değil CalculateScore() olmalıydı.

Anladım, lâkin hala sorun çözülmedi. İsimlendirme JavaScript 'den kalan alışkanlık. Dalgınlıkla böyle yazmışım.
 
Son düzenleme:
Anladım, lâkin hala sorun çözülmedi. İsimlendirme JavaScript 'den kalan alışkanlık. Dalgınlıkla böyle yazmışım.
Sanırım hatayı buldum, Main metodu Quiz namespace içinde değil.

Quiz.Quiz() q = new Quiz.Quiz(); diyerek oluşturabilirsiniz fakat program çalışmaz.

Bu kodları Program.cs dosyasına mı yazıyorsunuz?
 
Evet, C# ' da yeniyim. Alıştırma için yaptım.
O zaman şunu belirtmekte fayda var, ne oluşturursanız oluşturun bir namespace içinde olmalı.

Programın çalışması için bir Main metodu olmalı ki siz bu metodu namespace dışında tanımlamışsınız. Temel olarak görünüm aşağıdaki gibi olmalı. Aynı namespace içindeki sınıflar için erişim belirleyicisi vermenize gerek yok.

[CODE lang="csharp" title="C#"]using System;

namespace Quiz{
class Quiz{
//kodlar
}

static void Main(string[] args){
Quiz q = new Quiz();
//kodlar
}
}[/CODE]
 
Çözüm
O zaman şunu belirtmekte fayda var, ne oluşturursanız oluşturun bir namespace içinde olmalı.

Programın çalışması için bir Main metodu olmalı ki siz bu metodu namespace dışında tanımlamışsınız. Temel olarak görünüm aşağıdaki gibi olmalı. Aynı namespace içindeki sınıflar için erişim belirleyicisi vermenize gerek yok.

[CODE lang="csharp" title="C#"]using System;

namespace Quiz{
class Quiz{
//kodlar
}

static void Main(string[] args){
Quiz q = new Quiz();
//kodlar
}
}[/CODE]
Teşekkür ederim yardımınız için .
@Evilmonster son olarak; yapıcı fonksiyonun içine veri girerken syntax hataları veriyor şu şekilde olması gerekmiyor mu?
var quiz = new Quiz({"Soru 1","Soru 2"},{"Seçenek 1","Seçenek2"},{"Cevap 1","Cevap 2"})
Sanırım ben yanlış biliyorum.
 
Son düzenleme:

Yeni konular

Geri
Yukarı