Иногда для некоторый класс играет чисто вспомогательную роль для другого класса и используется только внутри него. В этом случае логично описать его внутри существующего класса. Вот пример такого описания:
using System;
namespace test
{
class ClassA
{
//Вложенный классprivate class ClassB
{
public int z;
}//Переменная типа вложенного классаprivate ClassB w;
//Конструкторpublic ClassA()
{
w=new ClassB();
w.z=35;
}
//Некоторый методpublic int SomeMethod()
{
return w.z;
}
}
class Test
{
static void Main(string[] args)
{
ClassA v=new ClassA();
int k=v.SomeMethod();
Console.WriteLine(k);
}
}
}
Здесь класс ClassB объявлен внутри класса ClassA. Объявлен он со словом private, так что его экземпляры мы можем создавать только внутри класса ClassA (что мы и делаем в конструкторе класса ClassA). Методы класса ClassA имеют доступ к экземпляру класса ClassB (как, например, метод SomeMethod).
Вложенный класс имеет смысл использовать тогда, когда его экземпляр используется только в определенном классе. Кроме того, при использовании вложеных классов улучшается читаемость кода - если нас не интересует устройство основного класса, то разбирать работу вложенного класса нет необходимости.
Обратите также внимание, как вложенные классы показываются на вкладке ClassView.
Основы C#. Урок 15. Перегрузка бинарных операторов
Перегрузка операторов - это задание для известных операторов (например, для +) новых значений. Например, мы можем перегрузить оператор + для векторов так, чтобы стало возможным использование в нашей программе конструкции вида:
...
Vector a, b, c;
...
c = a + b;
...
Здесь Vector - это введеный нами класс. Если мы не сделаем перегрузку операторов, то мы не сможем использовать знак "плюс" для экземпляров нашего класса Vector. Вот как это можно сделать для бинарного (т. е. имеющего два параметра) оператора:
Код для нашего класса приведен полностью, хотя перегрузка оператора занимает всего несколько строк. Вот они:
...
public static Vector operator +(Vector w, Vector v)
{
Vector res = new Vector(w.x + v.x, w.y + v.y);
return res;
}
...
Синтаксис здесь такой - если мы перегружаем оператор op, то мы должны в качестве имени оператора написать operator op (в нашем случае мы перегружаем +, поэтому пишем operator +). Далее, раз это метод, то мы пишем в круглых скобках его параметры. Для бинарного оператора их два (в отдичие от C++, где пареметр - это только правый операнд, левый же передается неявно - через указатель this). У нас они оба имеют тип Vector. Перед operator op пишем тип возвращаемого значения. Так как сумма двух векторов - это опять вектор, то перед именем нашего метода пишем Vector. Модификатор доступа public понятен - без него мы бы не смогли использовать перегруженный оператор вне класса. А вот слово static важно - в C# перегруженные операторы идут как static. Не забывайте его писать.
Внутри перегруженного оператора мы заводим переменную res типа Vector для возврата через нее результата. Ее мы определяем через конструктор с двумя параметрами, который мы ранее написали для нашего класса. Сложение двух векторов происходит так, как и должно происходить - покоординатно.
В классе test мы испытываем наш перегруженный оператор. Все должно работать как и положено, и результат сложения должен вывестись на консоль в виде "x=3, y=1".
Уроки по Visual Basic.NET с сайта progs.biz. Написание программ, создание собственных компонентов, примеры и исходники, создание ActiveX-элементов, работа с базами данных, создание веб-приложений, FAQ, и многое другое.