Зачем мне нужен класс упаковки? C # - PullRequest
0 голосов
/ 08 августа 2009

У меня есть программа некоторой длины, с классом и многими методами. Все они должны содержаться в одном огромном классе, который охватывает весь файл, за исключением операторов using. Необходимость такого огромного класса упаковки кажется бессмысленной, разве он используется только позже, когда создается программа с несколькими файлами?

    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?
    {}

    }

это мой полный файл. я компилирую csc file.cs затем file.exe.

оу, чувствительно к регистру. Благодарю. но все же -> зачем мне класс обтекания, когда он не использует тестовый класс?

Ответы [ 5 ]

6 голосов
/ 08 августа 2009

В C # нет глобальных методов или переменных. Они должны быть внутри объявления типа, такого как класс или структура. Это относится и к методу Main ().

Эрик Липперт опубликовал хороший ответ на вопрос SO, Почему C # не разрешает функции, не являющиеся членами, такие как C ++ , и продолжил в его блоге : Почему C # не реализует методы "верхнего уровня"?

Вам также может пригодиться следующая ссылка MSDN: Сравнение между C ++ и C #

Метод Main () является точкой входа в программы на C #. В программе должна быть только одна точка входа, но в программе может быть несколько классов, содержащих метод Main (). Однако, если у вас есть несколько методов Main, вы должны указать, какой метод Main будет использоваться в качестве точки входа, скомпилировав вашу программу с опцией компилятора /main.

Метод Main () должен быть static и не должен быть public в соответствии с MSDN . По умолчанию VS2008 создает Main () как статический private, и среда выполнения может вызывать его без каких-либо проблем. Вы можете изменить его на public, и он будет хорошо скомпилирован. Тем не менее, я думаю, что это действительно неловко, так как вы не можете запретить другим классам вызывать Main (), поскольку он общедоступен.

Дополнительные сведения о методе Main см. В следующей статье MSDN: Аргументы Main () и командной строки (Руководство по программированию в C #)

1 голос
/ 08 августа 2009

Мне кажется, вы используете класс, когда вам следует использовать пространство имен .

Кроме этого ... в C # весь код должен быть внутри некоторого класса. Было бы глупо делать исключение для метода Main().

Кстати, приватный Main() на самом деле прекрасно работает как точка входа в программу.

1 голос
/ 08 августа 2009

В C # это должно быть Main <--- прописной M: D </p>

1 голос
/ 08 августа 2009

У Main должна быть правильная подпись, чтобы быть признанным в качестве метода запуска Программы. Это означает, что вы можете иметь только 1 на класс. У вас может быть более 1 на программу, вы можете выбрать класс, который должен предоставлять основной, либо в командной строке компилятора, либо в Project | Properties | Application (ищите комбинированный список 'Startup Object').

Этот большой класс звучит странно, вы можете показать, что вы имеете в виду? И чтобы угадать, вы не путаете class и namespace здесь?

Добавить

В ответ на ваше Edit, в C # каждый метод, включая Main, должен быть в классе. Смотрите этот пост . А подпись для main по определению

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

Хотя вам разрешено пропускать параметр args. Командная строка в вашем случае будет:

csc /main:CollectKeywordsFromLogs  file.c

Существуют правила правил по умолчанию, когда вы пропускаете / main

0 голосов
/ 08 августа 2009

C # использует парадигму объектно-ориентированного программирования на основе классов, глобальные переменные относятся к другим парадигмам, таким как процедурное программирование; посмотрите здесь для статьи о парадигмах программирования. Правда, некоторые объектно-ориентированные языки программирования, особенно C ++, поддерживают глобальные переменные, но не C # (и это неплохо, imo: o)).

...