[SIZE=2][FONT=Courier New][[/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]Serializable[/COLOR][/SIZE][SIZE=2]] [/SIZE][SIZE=2][COLOR=#008000]//Не забываем применить этот атрибут!!!
[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]struct [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Person
[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff] public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] Name, Surname;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff] public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] Age;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff] public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] ContactInfo;[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]sealed [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]class [/COLOR][/SIZE][SIZE=2][COLOR=#008080]TypedFileStream[/COLOR][/SIZE][SIZE=2]<T> : [/SIZE][SIZE=2][COLOR=#008080]FileStream[/COLOR][/SIZE][SIZE=2][COLOR=#008000]//Класс для типизированного файла
[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]private[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] T m_Value;[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]private[/COLOR][/SIZE][SIZE=2] System.Runtime.Serialization.Formatters.Binary.[/SIZE][SIZE=2][COLOR=#008080]BinaryFormatter[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] bf;[/FONT][/SIZE]
[SIZE=2]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][SIZE=2] TypedFileStream([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] path, [/SIZE][SIZE=2][COLOR=#008080]FileMode[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] mode)[/FONT]
[FONT=Courier New] : [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]base[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New](path, mode)[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] bf = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2] System.Runtime.Serialization.Formatters.Binary.[/SIZE][SIZE=2][COLOR=#008080]BinaryFormatter[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]();[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] T TypedValue[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff] get [/COLOR][/SIZE][SIZE=2]{ [/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] m_Value; }[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff] set [/COLOR][/SIZE][SIZE=2]{ m_Value = [/SIZE][SIZE=2][COLOR=#0000ff]value[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]; }[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] WriteValue()[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] bf.Serialize([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New], m_Value);[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] ReadValue()[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] m_Value = (T)bf.Deserialize([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]);[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] ReadValue([/SIZE][SIZE=2][COLOR=#0000ff]out[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] T value)[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] ReadValue();[/FONT]
[FONT=Courier New] value = m_Value;[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] WriteValue(T value)[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New] m_Value = value;[/FONT]
[FONT=Courier New] WriteValue();[/FONT]
[FONT=Courier New]}[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] Main([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][] args)[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]Person[/COLOR][/SIZE][SIZE=2] Homer; [/SIZE][SIZE=2][COLOR=#008000]//Создаём экземпляр нашего типа
[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]Homer.Name = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"Homer"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT]
[FONT=Courier New]Homer.Surname = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"Simpson"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT]
[FONT=Courier New]Homer.Age = 45;[/FONT]
[FONT=Courier New]Homer.ContactInfo = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#800000]"City: Springfield; IQ<=0"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]TypedFileStream[/COLOR][/SIZE][SIZE=2]<[/SIZE][SIZE=2][COLOR=#008080]Person[/COLOR][/SIZE][SIZE=2]> typedFile = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#008080]TypedFileStream[/COLOR][/SIZE][SIZE=2]<[/SIZE][SIZE=2][COLOR=#008080]Person[/COLOR][/SIZE][SIZE=2]>([/SIZE][SIZE=2][COLOR=#800000]"homer.txt"[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#008080]FileMode[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Create);[/FONT]
[FONT=Courier New]typedFile.TypedValue = Homer;[/FONT]
[FONT=Courier New]typedFile.WriteValue(); [/FONT][/SIZE][SIZE=2][COLOR=#008000][FONT=Courier New]//сохраняем Гомера в файл[/FONT]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][FONT=Courier New]//Чтение Гомера из файла: typedFile.ReadValue(Homer);[/FONT]
[/COLOR][/SIZE][SIZE=2][FONT=Courier New]typedFile.Close();[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]
Запись переменной определённого типа в типизированный файл.
В Паскале всё было очень просто. Текстам - текстовые файлы, а созданным типам - свои, типизированные. Файл связывался с определённым типом, и внутрь файла можно было загнать сколько угодно значений этого типа.
Что имеем в С#? Работая с потоками, легко записать/считать текстовую информацию. А как то же самое проделать с нестринговыми переменными?
В платформе .NET нет понятия типизированный файл. Но есть замечательная штука - сериализация. Кратко пример такой:
соответственно, но он применим только для стандартных типов .NET