Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 137

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

Console.WriteLine("hello {0} {1} {2}", strA, strB, strC);

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

ΠŸΡ€ΠΈ описании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ JRE Java ΠΈ CLR C# ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ написанный Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ языкС ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся. Π₯отя ΠΊΠΎΠ΄ ΠΎΠ±ΠΎΠΈΡ… языков компилируСтся Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ вСрсии Java Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ компилируСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π² собствСнныС инструкции ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ компилятор Π² собствСнный ΠΊΠΎΠ΄). ВмСсто этого Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ для выполнСния срСду Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΠΈ Π² частности, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Имя ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° связано с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится исходный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ связан с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ класса Π² этом Ρ„Π°ΠΉΠ»Π΅. Π’ случаС опрСдСлСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса. НапримСр, возьмСм исходный Ρ„Π°ΠΉΠ» Test.java со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

// Test.java

class x {}

class Ρƒ {}

class z {}

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ этого Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π° классов: Ρ….class, Ρƒ.class, z.class. Один (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°) ΠΈΠ· этих классов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

// Test.java

public class x {}

class Ρƒ {}

class z {}

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ имя исходного Ρ„Π°ΠΉΠ»Π° Test.java Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ находящСгося Π² Π½Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ класса. Test.java поэтому станСт Ρ….java, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ компилировался.

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этому, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² IL ΠΊΠΎΠ΄ C# выполняСтся VES (Virtual Execution System), которая прСдоставляСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для IL, загруТая управляСмый ΠΊΠΎΠ΄, ΠΈ JITters (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ управляСмый ΠΊΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ языка Π² собствСнный ΠΊΠΎΠ΄ ΠΌΠ°ΡˆΠΈΠ½Ρ‹). Имя Ρ„Π°ΠΉΠ»Π° Hello.cs Π½Π΅ связано с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ врСмя компиляции с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π° /out. Если имя Ρ„Π°ΠΉΠ»Π° Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‚ΠΎ exe ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ имя Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° исходного ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ main, a DLL ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ имя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° исходного ΠΊΠΎΠ΄Π°. ЀактичСски имя Ρ„Π°ΠΉΠ»Π° Π΄Π°ΠΆΠ΅ Π½Π΅ связано с опрСдСлСниями Π»ΡŽΠ±Ρ‹Ρ… классов, находящихся Π² Ρ„Π°ΠΉΠ»Π΅. Класс Hello ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Ρ„Π°ΠΉΠ»Π΅ GoodbΡƒ.cs, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся Π² нСсвязанный MisterHanky.exe.

SDK .NET поставляСтся вмСстС с компилятором, поэтому Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… компиляторов для этого прилоТСния. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ просто ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ сохранСн Ρ„Π°ΠΉΠ» hello.cs, ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

csc hello.cs

Π€Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ Π² hello.exe. Π₯отя Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов Java Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этой Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ компиляции, Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Visual Studio.NET прСдоставляСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² IDE. НапримСр, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ исполнимого Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, добавляя свойство ΠΈΠΌΠ΅Π½ΠΈ сборки страницы свойств ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°Π½Π΅Π»ΠΈ Solution Explorer ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Properties ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Project Π² мСню, Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ, ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ мСню Properties. Π’ ΠΏΠ°ΠΏΠΊΠ΅ Common Properties ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ страницу General Properties ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свойство Assembly Name. МоТно Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ свойство для чтСния Output File измСняСтся, отраТая Π½ΠΎΠ²ΠΎΠ΅ имя сборки.

Π’ΠΈΠΏΡ‹ компиляции

ВсС Ρ„Π°ΠΉΠ»Ρ‹ Java ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ» Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .class, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ исходного ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для создания Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° прилоТСния. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ Form Π² Windows. Π’Ρ‚ΠΎΡ€ΠΎΠΉ исходный Ρ„Π°ΠΉΠ» AddLib.java являСтся Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ классом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ для выполнСния слоТСния Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ… чисСл. МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ JavaFrame ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ класс AddLib. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΈΡ… эквивалСнт C# Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅:

// код для JavaFrame.java

Package com.javaapp;

import java.awt.*;

import java.io.*;

import com.javalib.AddLib;


public class JavaFrame extends java.awt.Frame {

 public static void main (String[] args) {

  JavaFrame jfrm = new JavaFrame();

  jfrm.setSize(100, 100);

  jfrm.setVisible(true);

  AddLib lib = new AddLib();

  jfrm setTitle("Frame Version " + lib.operationAdd(12, 23));

 }

}


// код для AddLib.java

Package com.javalib;

public class AddLib {

 public AddLib() {

 }

 public int operationAdd(int a, int b) {

  return a + b;

 }

}

Java прСдоставляСт Π΄Π²ΡƒΡ…ΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ процСсс для создания исполнимого Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† компиляции: ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»(Ρ‹) ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» доступным, прСдоставляя компилятору ΠΏΡƒΡ‚ΡŒ доступа ΠΊ ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ находятся Ρ„Π°ΠΉΠ»Ρ‹ (ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π·Π° ΠΎΠ΄ΠΈΠ½ шаг). Класс ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступным с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π° компилятора -classpath для опрСдСлСния, Π³Π΄Π΅ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ символов, Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² исходном ΠΊΠΎΠ΄Π΅ (Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ компиляторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для этого ΠΊΠ»ΡŽΡ‡Π°). БистСма ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды окруТСния Classpath. Если ΠΊΠ»ΡŽΡ‡ -classpath Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚ΠΎ компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния, Ссли ΠΊΠ»ΡŽΡ‡ -classpath ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚ΠΎ ΠΎΠ½ пСрСопрСдСляСт Π»ΡŽΠ±Ρ‹Π΅ записи Classpath, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ срСди ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния для этой спСцифичСской компиляции.

ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ» JAR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступным Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠ°ΠΏΠΊΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π² сСбС класс. ΠšΠ»Π°ΡΡΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ»ΠΈ Π²Π½Π΅ Ρ„Π°ΠΉΠ»Π° JAR ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ нуля ΠΈΠ»ΠΈ большСго числа ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ JavaFrame ΠΈ AddLib Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Ρ‹ классов. ΠŸΡƒΡ‚ΡŒ доступа ΠΊ этим Ρ„Π°ΠΉΠ»Π°ΠΌ классов ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния CLASSPATH. Когда ΠΏΡƒΡ‚ΡŒ доступа ΠΊ классам Π·Π°Π΄Π°Π½, Π»ΡŽΠ±Ρ‹Π΅ классы ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈΠ· любого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² систСмС, пСрСдавая ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя класса Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π’Ρ‹Π·ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SUN Microsystems JDK 1.3:

java javalib.JavaFrame

ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ JavaFrame ΠΈ созданию Frame с панСлью Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, выводящСй Java Frame Version 35.

Код Π² C# всСгда послС компиляции автоматичСски ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ Π² Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹ компиляции ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ классов, сколько потрСбуСтся. Бпособ использования этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ снова дСлится ΠΌΠ΅ΠΆΠ΄Ρƒ использованиСм ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ использованиСм IDE (Π² частности, Visual Studio.NET). Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VS.NET Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΈΠΏ создаваСмого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘Ρ€Π΅Π΄ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ возмоТности ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ консольноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ пустой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ·ΠΆΠ΅. ΠŸΡ€ΠΎΡ†Π΅ΡΡ опрСдСлСния Ρ‚ΠΈΠΏΠ° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VS.NET описан дальшС Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС для измСнСния Ρ‚ΠΈΠΏΠ° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡ /target: <target-type>, Π³Π΄Π΅ target-type являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· строк:

β–‘ Π•Ρ…Π΅

β–‘ Library

β–‘ Winexe

МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ любоС число Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ:

csc /target:<target-type> <file1> <file2> ... <filen>

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ компиляции с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VS.NET являСтся вопросом добавлСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. МоТно Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, помСняв свойство Output Type Π½Π° страницС General Properties (смотритС Π²Ρ‹ΡˆΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ доступа ΠΊ страницС с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ свойствами).

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½

ЦСль Π΄Π°Π½Π½ΠΎΠ³ΠΎ излоТСния состоит Π² создании вСрсии C# Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π° JavaFrame ΠΈ AddLib ΠΈ рассмотрСнии Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ процСсса создания ΠΊΠΎΠ΄Π° C#. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π²Π° эти класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… эквивалСнты Π² C#.

ΠšΠ»Π°ΡΡΡ‹ Java ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² логичСских подраздСлСниях, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. ΠŸΠ°ΠΊΠ΅Ρ‚ опрСдСляСтся ΠΊΠ°ΠΊ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, которая Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ классы вмСстС. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° программиста ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ограничСния доступа ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ Π² C# ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для объСдинСния управляСмых классов, Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ. Π—Π΄Π΅ΡΡŒ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± управляСмых классах, Π° Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… классах C#, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ классы Π² пространствС ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ· любого, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ CLS, языка (вспомнитС, Ρ‡Ρ‚ΠΎ CLS являСтся нСзависимым ΠΎΡ‚ языка). ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ пространства ΠΈΠΌΠ΅Π½, ΠΎΠ΄Π½Π°ΠΊΠΎ, сущСствСнно Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ своСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Класс Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° com.samples, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки ΠΊΠΎΠ΄Π° Π² Ρ„Π°ΠΉΠ»Π΅ Package com.samples. Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого Ρ„Π°ΠΉΠ»Π° автоматичСски становится Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Java Ρ‚Π°ΠΊΠΆΠ΅ связываСтся с ΠΏΠ°ΠΏΠΊΠΎΠΉ, содСрТащСй Ρ„Π°ΠΉΠ» класса Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°. ΠŸΠ°ΠΊΠ΅Ρ‚ com.samples поэтому Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сущСствуСт Π² ΠΏΠ°ΠΏΠΊΠ΅ com\samples. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.