Предлагаю (точнее, настаиваю) вместо указанного сценария работы с файлами (подключи-отключи) использовать особый каркас приложения, в котором части класса Program разнесены по файлам (сколько примеров — столько и файлов). Он удобен тем, что одно решение демонстрирует всю вашу работу. По мере продвижения по курсу в проект будут добавляться новые классы, а в класс Program будут добавляться новые статические методы, иллюстрирующие конкретные средства языка C#. Чуть позже в пространство решений (Solution) мы добавим новый проект. В конце семестра вы должны иметь одно решение, состоящее из нескольких проектов. Это решение содержит всю работу за семестр.
Исследуем некоторые типы данных и убедимся, что все классы и структуры имеют неявного родителя (происходят от класса Object). Для этого, измените код файла Program.cs:
using System;
using System.Text;
namespace MyConsole
{
partial class Program
{
public static void Main()
{
Console.BackgroundColor = ConsoleColor.DarkBlue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WindowWidth = 110;
Console.WindowHeight = 45;
Console.Title = "MyConsole Application";
Console.InputEncoding = Encoding.GetEncoding("windows-1251");
while (true)
{
Console.Clear();
switch (Menu())
{
case '\x1b':
Console.Beep(800, 100); Console.Beep(600, 100); Console.Beep(400, 500);
Console.Write("\a\a"); return;
case 'q': return;
case 't': TestTypes(); break;
}
}
}
public static char Menu()
{
Console.Write("\n\tSelect one of the methods:\n" + // Меню выбора действия
"\n\tq (Esc) - Quit\n\tt - Types\n\n");
return char.ToLower(Console.ReadKey(true).KeyChar); // Читаем символ
}
}
Здесь вы видите способы управления классом Console c помощью его статических методов и свойств. О новой сущности языка (свойствах) мы поговорим позже, а суть вызываемых методов мне кажется очевидной. Кроме того, обратите внимание на ключевое слово partial, которое говорит о том, что класс Program будет иметь продолжение(я) в других файлах. Теперь добавьте в проект новый файл (команда Add New Item→Class контекстного меню проекта) с именем TestTypes.cs.
Измените содержимое файла, как показано ниже.
using System;
namespace MyConsole
{
partial class Program
{
static void TestTypes()
{
Console.Clear();
bool b = false;
Type t = b.GetType();
Console.WriteLine("\tValue and Reference Types\n" +
"Assembly:\t" + t.Assembly.FullName +
"\n\n" + t +
":\n\nPrimitive type \t\t{0}, \nPointer type \t\t{1}, " +
"\nValue type \t\t{2}, \nSubclass of object \t{3}\n",
t.IsPrimitive, t.IsPointer, t.IsValueType, t.IsSubclassOf(typeof(object)));
t = typeof(Program);
Console.WriteLine(t + ":\n\nPrimitive type \t\t{0}, \nPointer type \t\t{1}, " +
"\nValue type \t\t{2}, \nReference type \t\t{3}, \nSubclass of object \t{3}\n",
t.IsPrimitive, t.IsPointer, t.IsValueType, t.IsClass, t.IsSubclassOf(typeof(object)));
Console.WriteLine("\nNew Types:\n\n" +
"uint: \t(" + uint.MinValue + ", " + uint.MaxValue + ")\n" +
"ulong: \t({0}, {1}) max: {2:e1} \ndecimal: ({3}, {4}) max: {5:e1}\n",
ulong.MinValue, ulong.MaxValue, (double)ulong.MaxValue,
decimal.MinValue, decimal.MaxValue, decimal.ToDouble(decimal.MaxValue));
decimal d = 100.25m;
Console.WriteLine("\nSuffix 'm' stands for money: " + d + '\n');
float[] a = { 1, -1.25f, 1.03f, -1, 1e8f, -1e-2f, 5e6f }; // Массив переменных типа float
Console.WriteLine("\n\nTest Formatting options\n");
for (int i = 0; i < a.Length; i++)
Console.Write("\n{0,12:f2} ", a[i]); // Здесь используется 12 позиций
Console.WriteLine("\n\t\tPress any key to go to main menu\n");
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.