Несколько Основных Функций


Я немного новичок в этом так, медведь со мной. Сейчас я изучаю C# и Java, и их сходство заключается в том, что основная функция должна быть инкапсулирована в класс. Например

public class HelloWorld {
    public static void main(String[] args) {
        // Some Code
    }
}

теперь я понимаю, что main часто является "точкой входа" при запуске программы. Таким образом, ваша программа начнет выполняться везде, где находится основная функция. Но я считаю, что в обоих языках вы можете иметь несколько основных функций в нескольких классах. Поэтому, когда я компилирую проект с несколькими основными функциями, где находится "точка входа"? Откуда компилятор знает, с чего начать?

10 67

10 ответов:

в .NET вы можете определить, какой класс содержит основной метод, который вы хотите использовать при компиляции.

http://msdn.microsoft.com/en-us/library/x3eht538.aspx

в Java, если вы связываетесь с jar, вы можете определить свою точку входа в манифест jar.

http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

в Java компьютер определяет "точку входа", когда вы фактически выполняете программу, а не при компиляции. Например, из командной строки

java MyClass

ищет main() in MyClass. Все остальные main() функции игнорируются.

если вы используете IDE, то вы можете установить, какой класс содержит main() функция, которую вы хотите использовать.

В C#, вы можете использовать несколько Main методы.

Если есть несколько Main методы, компилятор не знает, какую точку входа использовать, и, следовательно, он покажет вам ошибку.

вы нужно указать Main метод для использования при компиляции: Можно указать, какой метод будет использоваться в качестве параметра компилятора в среде разработки Visual Studio или через компилятор csc.

основной класс является специальным классом только по одной причине: когда вы запускаете виртуальную машину Java, эта функция является тем, что вызывает JVM. Он по существу похож на любую другую функцию, и фактически вы можете вызвать основную функцию одного класса из другого класса.

когда вы компилируете проект с несколькими классами, вы говорите JVM, чтобы запустить класс с основным классом, который вы хотите использовать, например:

java SomeClass

и он будет запускать основной метод SomeClass, предполагая, что SomeClass компилируется и что соответствующий скомпилированный файл находится в вашем classpath. (Это то, что вам придется работать с вашей конкретной ОС, но я думаю, что это довольно обычно для опции-cp, чтобы указать путь к классу). Так вот:

java -cp /home/MyName Someclass

будет работать основная функция SomeClass в каталоге / home / MyName

в C#, вы указываете точку входа с помощью /main: опции компилятора.

рассмотрим следующий код, содержащий два main() функции:

namespace Application {
    class ClassOne {
        static void main () {
            // Code here
        }
    }

    class ClassTwo {
        static void main () {
            // Code here
        }
    }
}

использовать ClassOne.main() в качестве точки входа вы должны указать следующее при компиляции:

csc /main:Application.ClassOne hello.cs

в Java, как указывали другие, вы определяете класс, содержащий вашу основную функцию, когда вы запускаете .

но вы также можете создать исполняемый файл jar, который можно запустить с java -jar my.jar. В этом случае вам нужен файл манифеста с именем MANIFEST.MF в папке META-INF в банке. В этом файле вы указываете класс, содержащий основную функцию, используя инструкцию:Main-Class: YourClass.

для нескольких основных функций точка входа может быть объявлен :

чтобы установить этот параметр компилятора в среде разработки Visual Studio

откройте страницу свойств проекта.

щелкните страницу свойств приложения.

изменить свойство объекта запуска.

Ссылка:http://msdn.microsoft.com/en-us/library/x3eht538.aspx

метод main является статическим, что означает, что он принадлежит к классу, а не объекту. Таким образом, объект не будет иметь другого основного метода внутри него вообще. Он не будет иметь дополнительного main-метода, так как main является статическим. Так что это один раз за класс.

Если у вас есть несколько основных методов в вашем проекте, вы укажете, какой из них запускать при запуске приложения

фактически, в двоичном файле, например, формат PE в windows и формат ELF в Linux или любой другой системе, заголовок двоичного файла будет указывать, где находится начальный адрес, и может быть только один.

какой из них должен быть точкой входа? Это зависит от компоновщика. Так же, как @SetFreeByTruth сказал, что вы можете указать его с параметрами командной строки. Многие компоновщики поддерживают указание точки входа с помощью параметров командной строки. например, gld gnu может указать точку входа с помощью параметр -е.

Я не знаю поведение Java, потому что он загружен виртуальной машиной Java.

в Visual Studio выберите проект, который вы хотите быть точкой входа, щелкните правой кнопкой мыши и установите в качестве проекта запуска.