Witam
Mam kilka klas rozbitych po kilku plikach - wszędzie ten sam namespace.
Chcę w zdarzeniu wywołać metodę/konstruktor z innej klasy. Problem - nie mogę tego zrobić gdyż metoda/kontruktor jest "niewidoczna".
Przykład:
class Metody
{
public string OdczytDanychZWagi(TcpClient klientTCP, byte[] WysylaneZapytanie)
{
// Wysyłka komunikatu do podłączonego serwera TCP
NetworkStream stream = klientTCP.GetStream();
stream.Write(WysylaneZapytanie, 0, WysylaneZapytanie.Length);
// Otrzymanie odpowiedzi
// Buffor na odpowiedz
byte[] odpowiedz = new Byte[256];
// String do przechowywania odpowiedzi w ASCII
String responseData = String.Empty;
// Odczyt danych z serwera
Int32 bytes = stream.Read(odpowiedz, 0, odpowiedz.Length);
responseData = System.Text.Encoding.ASCII.GetString(odpowiedz, 0, bytes);
return responseData;
}
void WysylkaDoWagi(TcpClient klientTCP, byte[] KomunikatWysylany)
{
NetworkStream stream = klientTCP.GetStream();
stream.Write(KomunikatWysylany, 0, KomunikatWysylany.Length);
}
}
Teraz klasa w której chciałbym wywołać:
public partial class Form1 : Form
{
public static TcpClient KlientTCP;
public string IP = Properties.Settings.Default.AdresIP;
public int nr_portu = Properties.Settings.Default.NrPortu;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
l_adresIP.Text = "Adres IP: " + Properties.Settings.Default.AdresIP;
l_nrPortu.Text = "Nr portu: " + Properties.Settings.Default.NrPortu;
l_nrWagi.Text = "Nr wagi: " + Properties.Settings.Default.NrWagi;
l_uruchomiono.Text = "Uruchomiono " + DateTime.Now;
if (Properties.Settings.Default.CzyAutostart == 'T')
{
bt_polacz.Enabled = false;
KlientTCP = new TcpClient();
KlientTCP.Connect(IPAddress.Parse(IP), nr_portu);
l_Autostart.Text = "Autostart: TAK";
l_polaczono.Text = "Połączono: " + DateTime.Now;
string odp = OdczytDanychZWagi(KlientTCP, OdczytZWagi.RejestrStatusu);
tb_komunikaty.Text = odp;
}
Kod
string odp = OdczytDanychZWagi(KlientTCP, OdczytZWagi.RejestrStatusu);
tb_komunikaty.Text = odp;
wywala błąd "The name 'OdczytDanychZWagi' does not exist in the current context"
Oczywiście próbowałem już z opcjami static / public itd.
Zadziała jeśli wpierw stworzę nową instancję klasy na zasadzie:
Metody metoda = new Metody();
string odp = metoda.OdczytDanychZWagi(KlientTCP, OdczytZWagi.RejestrStatusu);
tb_komunikaty.Text = odp;
Pytanie czy to konieczne?? Czy nie można prościej?? Chodzi mi o jaknajmniejszą ilość kodu. Czy takie ciągłe tworzenie nowych instancji klas nie wpłynie na wydajność aplikacji?
sformatowanie znaczników <code class="csharp"> - fp