Nie widzę publicznych metod z klasy

0

Nie wiem co się dzieje, mam taka klasę:

public class Sender
    {
        private string stringToFile;
        private string IPA;
        private int PortN;
        public Sender(string stringToFile, string IPA, int PortN)
        {
            this.stringToFile = stringToFile;
            this.IPA = IPA;
            this.PortN = PortN;
        }
        public void method()
        {

        }

        public void SendTCP()
        {
            int BufferSize = 1024;
            byte[] SendingBuffer = null;
            TcpClient client = null;
            // lblStatus.Content = "";
            NetworkStream netstream = null;
            try
            {
                client = new TcpClient(IPA, PortN);
                //lblStatus.Content = "Connected to the Server...\n";
                netstream = client.GetStream();
                FileStream Fs = new FileStream(stringToFile, FileMode.Open, FileAccess.Read);
                int NoOfPackets = Convert.ToInt32
             (Math.Ceiling(Convert.ToDouble(Fs.Length) / Convert.ToDouble(BufferSize)));

                int TotalLength = (int)Fs.Length, CurrentPacketLength;
                for (int i = 0; i < NoOfPackets; i++)
                {
                    if (TotalLength > BufferSize)
                    {
                        CurrentPacketLength = BufferSize;
                        TotalLength = TotalLength - CurrentPacketLength;
                    }
                    else
                        CurrentPacketLength = TotalLength;
                    SendingBuffer = new byte[CurrentPacketLength];
                    Fs.Read(SendingBuffer, 0, CurrentPacketLength);
                    netstream.Write(SendingBuffer, 0, (int)SendingBuffer.Length);

                }

                //lblStatus.Content = lblStatus.Content + "Sent " + Fs.Length.ToString() + "bytes to the server";
                Fs.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (netstream != null)
                    netstream.Close();
                if (client != null)
                    client.Close();
            }
        }
    }

I nie mam dostępu do publicznych metod:
fd46e57144.png
Coś mi umyka czy to coś nie tak z VS?

1

zrzutuj sender na Sender - ((Sender)sender).

0

A no tak :D
Nie zauważyłem tego. Resetuje Visuala po kilka razy bo myślałem że bug :P

1

W klasie MainWindow masz pole typu Sender o nazwie sender. W metodzie Button_Click masz obiekt o nazwie sender. Poniewaz zarowno pole klasy jak i parametr metody maja taka sama nazwe pole sender zostaje przykryte przez paramter sender. Jezeli chcesz sie odwalac do pola sender to powinienes napisac this.sender.

1

Dlatego do pól odwołujemy się zawsze przez this.nazwaPola i problemu nie ma.

0

No wiem, wiem. Tylko w tym wypadku zgłupiałem i szukałem problemu gdzie indziej :P

Tak już odchodząc od mojego głupiego błędu, czy mogę wysłać za pomocą tej klasy plik razem z nazwą i rozszerzeniem? Czy to muszę mu oddzielnie najpierw jakoś nazwę wysłać a później plik?

0
tk napisał(a):

W klasie MainWindow masz pole typu Sender o nazwie sender. W metodzie Button_Click masz obiekt o nazwie sender. Poniewaz zarowno pole klasy jak i parametr metody maja taka sama nazwe pole sender zostaje przykryte przez paramter sender. Jezeli chcesz sie odwalac do pola sender to powinienes napisac this.sender.

Niby tak ale to za mało. Pole typu Sender powinno mieć:
a) inną nazwę typu
b) inną nazwę pola

Zresztą kwiatków jest więcej:
a) stringToFile - brzmi jak nazwa funkcji
b) public void method() - WTF?
c) BufferSize - http://msdn.microsoft.com/pl-pl/library/ms173119.aspx
d) SendingBuffer z dużej, ale client z małej - przyda się jakaś konsekwencja
e) parametr konstruktora TcpClient to "hostname" - skąd nazwa IPA?

0

Całą metodę SendTCP skopiowałem z jakiejś strony, method() zrobiłem sam bo nie wiedziałem czemu nie widać SendTCP i chciałem sprawdzić czy coś innego zobaczy.

skąd nazwa IPA?

Też nie wiedziałem na początku o co chodzi ale wydaje mi się że to IP Adress

1

Zmień tego Sendera, chyba że piszesz do szuflady.
To jest raczej TcpSender, lub TcpFileSender.
I SendTcp może być po prostu wtedy być nazwane Send().

1 użytkowników online, w tym zalogowanych: 0, gości: 1