Pergunta

Eu tenho um programa de certa extensão, com uma classe e muitos métodos.Tudo isso deve estar contido em uma classe enorme que agrupa todo o arquivo, exceto as instruções using.A necessidade daquela enorme classe de empacotamento parece inútil. Ela é usada somente mais tarde, ao fazer um programa com vários arquivos?

    using System;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Collections.Generic;
    using System.Linq;

    public class CollectKeywordsFromLogs // why do I need this ( when it is the only class [as i just added the test class for the question])
    {

    //a class
        //constructor
        //methods

    //methods

    public static void Main()  // and why would i need to explicitly declare this public? it works either way, and a private main would be useless no?
    {}

    }

este é meu arquivo completo.eu compilo csc file.cs e depois file.exe.

ah, duh, diferencia maiúsculas de minúsculas.obrigado.mas ainda assim -> por que preciso da classe de empacotamento quando não estou usando a classe de teste?

Foi útil?

Solução

Não há métodos ou variáveis ​​globais em C#.Eles devem estar dentro de uma declaração de tipo, como class ou struct.Isso também se aplica ao método Main().

Eric Lippert postou uma boa resposta para a pergunta SO, Por que o C# não permite funções de não membros como C++, e seguido mais adiante em o blog dele: Por que o C# não implementa métodos de “nível superior”?

Você também pode achar útil o seguinte link do MSDN: Comparação entre C++ e C#

O método Main() é um ponto de entrada de programas C#.Deve haver apenas um ponto de entrada em um programa, mas pode haver várias classes que contenham um método Main() em um programa.No entanto, se você tiver vários métodos Main, deverá especificar qual método Main será usado como ponto de entrada compilando seu programa com o método Main. opção do compilador /main.

O método Main() deve ser static e não deveria ser public de acordo com MSDN.Por padrão, o VS2008 cria um Main() como static private e o tempo de execução pode chamá-lo sem nenhum problema.Você pode alterá-lo para public e compilará bem.No entanto, acho que é realmente estranho, pois você não pode impedir que outras classes chamem Main(), pois é público.

Para obter mais informações sobre o método Main, você pode consultar o seguinte artigo do MSDN: Main() e argumentos de linha de comando (guia de programação C#)

Outras dicas

Em c# deve ser principal <--- capital m: d

Parece -me que você está usando uma aula, quando deve estar usando um espaço para nome.

Fora isso ... em C#, todo o código deve estar dentro de uma classe de algum tipo. Seria bobagem fazer uma exceção para o Main() método.

Um privado Main() Na verdade, funciona bem como ponto de entrada do programa, a propósito.

Um principal deve ter a assinatura certa para ser reconhecida como método de inicialização do programa. Isso significa que você pode ter apenas 1 por classe. Você pode ter mais de 1 por programa.

Essa grande classe parece estranha, você pode mostrar o esboço do que você quer dizer? E para adivinhar, você não está confuso class e namespace aqui?

Adicionar

Em resposta à sua edição, em C# todo O método, incluindo Main, deve estar em uma classe. Ver esta postagem. E a assinatura para Main, por definição, é

public static void Main(string[] args) { }

Embora você possa omitir o parâmetro args. A linha de comando no seu caso seria:

csc /main:CollectKeywordsFromLogs  file.c

Existem regras de regra padrão quando você deixar de fora /principal

C# usa o paradigma de programação orientada a objetos baseado em classes, variáveis ​​globais pertencem a outros paradigmas como programação processual;dar uma olhada aqui para um artigo sobre paradigmas de programação.É verdade que algumas linguagens de programação orientadas a objetos, especialmente C++, suportam variáveis ​​globais, mas não C# (e isso é uma coisa boa, imo: o)).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top