• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# przekazywanie zmiennych pomiędzy klasami

Object Storage Arubacloud
0 głosów
2,100 wizyt
pytanie zadane 30 kwietnia 2017 w C# przez liledusty Obywatel (1,430 p.)

Witam posiadam pewien problem. Dotyczy on przekazywania zmiennych pomiedzy klasami w obie strony.

Kod:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Odpalanie_programow_konsolka
{
    public partial class dodajprogram : Form
    {


        program program = new program(); TU WYWYWALA BŁĄD
        string wyslijkomenda;
        string wyslijsciezka;

        public dodajprogram()
        { 
            InitializeComponent();
       
    }
        private dodajprogram dodaj = new dodajprogram();
  
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
           
            if(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox2.Text = openFileDialog1.FileName;

            }
            
        }

        public void button1_Click(object sender, EventArgs e)
        {
           
           wyslijkomenda = textBox1.Text;
           wyslijsciezka = textBox2.Text;
            
            program.dodajprogram(wyslijkomenda, wyslijsciezka);
            Dictionary<int, program> oPersonsDictionary = new Dictionary<int, program>();
           oPersonsDictionary.Add(program.id, new program(program.id, program.komenda, program.sciezka));
            






        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();   
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            
        }

        private void dodajprogram_FormClosed(object sender, FormClosedEventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
        }

        private void timer1_Tick_1(object sender, EventArgs e)
        {
            
        }
    }
    public partial class program
    {
        public int id = 1;
        public string komenda;
        public string @sciezka;

        public program(int i, string k, string s)
        {
            id = i;
            komenda = k;
            sciezka = s;
           
        }

       public void dodajprogram(string wyslijkomenda, string wyslijsciezka)
        {
            id += 1;
            komenda = wyslijkomenda;
            @sciezka = wyslijsciezka;
            MessageBox.Show(komenda + " " + sciezka+" "+id);
            dodajprogram dodajprogram = new dodajprogram();



        }



    }




}

Otóż z przesyłaniem zmiennych do klasy program nie ma problemu, ale gdy chce przesłać zmienne do klasy dodajprogram to nie dość że muszę używać "program.ZMIENNA" to jeszcze mi wywala błąd przy tworzeniu instancji tej klasy. Ogólnie jakoś tego całego przesyłania nie do końca rozumiem, jakby ktoś mógłby mi wytłumaczyć byłbym bardzo wdzięczny. 

2 odpowiedzi

0 głosów
odpowiedź 30 kwietnia 2017 przez CzikaCarry Szeryf (75,340 p.)
wybrane 30 kwietnia 2017 przez liledusty
 
Najlepsza
Klasa program to klasa statyczna, więc nie możesz stworzyć jej instancji. W tym przypadku możesz odwołać się tylko do pól publicznych. Poczytaj co to są settery i gettery.
komentarz 30 kwietnia 2017 przez liledusty Obywatel (1,430 p.)
edycja 30 kwietnia 2017 przez liledusty

Przerobiłem kod na gettery i settery

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Odpalanie_programow_konsolka
{
    public partial class dodajprogram : Form
    {


        program programob = new program();
        public string wyslijkomenda { get; set; }
        public string wyslijsciezka { get; set; }

        public dodajprogram()
        { 
            InitializeComponent();
       
    }
        private dodajprogram dodaj = new dodajprogram();
  
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
           
            if(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox2.Text = openFileDialog1.FileName;

            }
            
        }

        public void button1_Click(object sender, EventArgs e)
        {
           
           wyslijkomenda = textBox1.Text;
           wyslijsciezka = textBox2.Text;

            programob.addprogram();
            Dictionary<int, program> oPersonsDictionary = new Dictionary<int, program>();
            
           oPersonsDictionary.Add(programob.id, new program(programob.id, programob.komenda, programob.sciezka));
            






        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();   
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            
        }

        private void dodajprogram_FormClosed(object sender, FormClosedEventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
        }

        private void timer1_Tick_1(object sender, EventArgs e)
        {
            
        }
    }
    public class program
    {
        
        public int id { get; set;}
        public string komenda { get; set; }
        public string @sciezka { get; set; }

        public program ()
        {
            
           
        }

       public void addprogram()
        {
            id += 1;
            dodajprogram dodajprogramob = new dodajprogram();
            komenda = dodajprogramob.wyslijkomenda;
            @sciezka = dodajprogramob.wyslijsciezka;
            MessageBox.Show(komenda + " " + sciezka+" "+id);
          


        }



    }




}

Ale pokazuje mi przy opersonsDictionary błąd w którym pisze że muszę podać 3 argumenty w konstruktorze a gdy je podam pojawia się ten sam błąd co wyżej. Może coś nie tak z tą konstrukscją opersonsDictionary zrobiłem?

komentarz 30 kwietnia 2017 przez Dorion300 Szeryf (90,250 p.)
edycja 30 kwietnia 2017 przez Dorion300

@CzikaCarry klasa "program" nie jest klasą statyczną.

Po prostu parametry konstruktora są puste. (Nie ma konstruktora nie przyjmującego żadnego parametru)

komentarz 30 kwietnia 2017 przez liledusty Obywatel (1,430 p.)
edycja 30 kwietnia 2017 przez liledusty

Gdy dam parametry do konstruktora to pojawia się ten sam błąd co wcześniej, czyli przy tworzeniu instancji klasy w klasie dodajprogram:

program programob = new program(); Co mam tutaj podać? Mam te parametry które wysyłą konstruktor klasy program odebrać? Jak tak to w jaki sposób? Próbowałem na wszystkie możliwe sposoby

      
Klasa dodajprogram:

program programob = new program(); tutaj wywala błąd<<<<


Klasa program:
Konstruktor klasy program
  public program (int id, string komenda, string sciezka)
        {
            this.id = id;
            this.komenda = komenda;
            this.sciezka = sciezka;
           
        }

 

komentarz 30 kwietnia 2017 przez Dorion300 Szeryf (90,250 p.)
program programob = new program(421512, "cokolwiek", "blablabla");  //MUSZĄ BYĆ PARAMETRY DODANE!

//Albo w klasie "program"

public program ()
{          
}
komentarz 30 kwietnia 2017 przez liledusty Obywatel (1,430 p.)
No tak, zapomniałem o domyślnych wartościach. Wszystko teraz działa jak powinno. Dzięki za pomoc.
0 głosów
odpowiedź 30 kwietnia 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Nie możesz nazwać zmiennej tą samą nazwą co klasę.

Podobne pytania

0 głosów
1 odpowiedź 101 wizyt
pytanie zadane 8 stycznia 2017 w C# przez jankustosz1 Nałogowiec (35,880 p.)
0 głosów
1 odpowiedź 344 wizyt
pytanie zadane 2 września 2019 w C# przez XavRock Obywatel (1,390 p.)
0 głosów
0 odpowiedzi 282 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...