Wątek przeniesiony 2018-12-07 01:25 z C# i .NET przez somekind.

Błąd Member cannot be accessed with an instance reference przy kompilacji

0

Witam.
Mam mały problem z c#.
Potrzebuję dodać do aplikacji RabbitMQ.

Mam taki kod:



    Main app
    
    using RabbitMQ.Client;
    using System.Text;
    using System;
    using Main.Test;
    
    namespace TestService.ConsoleApp
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                // Test RabbitMQ
                var sender = new Rabbit();
            sender.Send("IDG", "Hello World!");
            sender.Receive("IDG");
            Console.ReadLine();
            }
        }
    }
    
    
    Rabbit.cs:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using RabbitMQ.Client;
    
    
    namespace Main.Test
    {
        public class Rabbit
        {
            public IConnection GetConnection(string hostName, string userName, string password)
            {
                ConnectionFactory connectionFactory = new ConnectionFactory();
                connectionFactory.HostName = "localhost";
                connectionFactory.UserName = "guest";
                connectionFactory.Password = "guest";
                connectionFactory.Port = 5672; // 5672 for regular connections, 5671 for connections that use TLS
                return connectionFactory.CreateConnection();
            }
    
            public static void Send(string queue, string data)
            {
                using (IConnection connection = new ConnectionFactory().CreateConnection())
                {
                    using (IModel channel = connection.CreateModel())
                    {
                        channel.QueueDeclare(queue, false, false, false, null);
                        channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));
                    }
                }
            }
    
            public static void Receive(string queue)
        {
            using (IConnection connection = new ConnectionFactory().CreateConnection())
            {
                using (IModel channelconsumer = connection.CreateModel())
                {
                    channelconsumer.QueueDeclare(queue, false, false, false, null);
                    //var consumer = new EventingBasicConsumer(channel);
                    BasicGetResult result = channelconsumer.BasicGet(queue, true);
                    if (result != null)
                    {
                        string data =
                        Encoding.UTF8.GetString(result.Body);
                        Console.WriteLine(data);
                    }
                }
            }
        }
    }

Kiedy uruchamiam kompilację otrzymuję taki błąd:

  1. sender.Send("IDG", "Hello World!"); and sender.Receive("IDG"); - CS0176 C# Member cannot be accessed with an instance reference; qualify it with a type name instead

Wie ktoś może w jaki sposób można to naprawić?

0

Usuń słówka static przed metodami ;)
z

public static void Send(string queue, string data)

na

public  void Send(string queue, string data)

i analogicznie druga metoda

0

Receive() i Send() masz oznaczone jako statyczne. Nie możesz ich wywołać z instancji. Co zresztą dokładnie mówi Ci treść błędu.

0

Działa. Dziękuje za pomoc :)

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