簡體   English   中英

如何創建另一個類中存在的類的新實例?

[英]How create a new instance of a class that is present inside another class?

我想創建一個存在於另一個類中的類的新實例,並訪問您的成員。

根據下面的代碼,我想在服務器桌面應用程序中創建連接的客戶端列表。

然后我嘗試了以下代碼,但說“ Command”類不是必需的。

我該如何解決?

Client.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class Client
{
    public class Command
    {
        public Socket sock;
        public Guid ID;
        public string RemoteAddress;
        public byte[] buffer = new byte[8192];

        public Command(Socket sock)
        {
            this.sock = sock;
            ID = Guid.NewGuid();
            RemoteAddress = sock.RemoteEndPoint.ToString();
        }

        public void Send(string data)
        {
            byte[] buffer = Encoding.UTF8.GetBytes(data);
            sock.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback((ar) =>
            {
                sock.EndSend(ar);
            }), buffer);
        }
    }

    public class Screenshot
    {
        public Socket sock;
        public Guid ID;
        public string RemoteAddress;
        public byte[] buffer = new byte[8192];

        public Screenshot(Socket sock)
        {
            this.sock = sock;
            ID = Guid.NewGuid();
            RemoteAddress = sock.RemoteEndPoint.ToString();
        }

        public void Send(string data)
        {
            byte[] buffer = Encoding.UTF8.GetBytes(data);
            sock.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback((ar) =>
            {
                sock.EndSend(ar);
            }), buffer);
        }
    }
}

在其他課程中,我嘗試了:

class Listener
{

Socket s;
public List<Command> clients; // not accessible "Command"

public Listener()
{
    clients = new List<Client>();
    s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}

public void BeginListen(int port)
{
    s.Bind(new IPEndPoint(IPAddress.Any, port));
    s.Listen(100);
    s.BeginAccept(new AsyncCallback(AcceptCallback), s);
}

void AcceptCallback(IAsyncResult ar)
{
    Socket handler = (Socket)ar.AsyncState;
    Socket sock = handler.EndAccept(ar);
    Command client = new Command(sock); // not accessible "Command"
    clients.Add(client);

    sock.BeginReceive(client.buffer, 0, client.buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), client);
    handler.BeginAccept(new AsyncCallback(AcceptCallback), handler);
}

您不能使用List<Command>指向新的實例類型為List<Client>因為ClientCommand類不同,它是類的內部。

public List<Command> clients; // not accessible "Command"

public Listener()
{
    clients = new List<Client>();
    s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}

嘗試使用Client.Command而不是CommandClient

public List<Client.Command> clients; 

public Listener()
{
    clients = new List<Client.Command>();
    s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM