Выражения создания объектов
Выражение_создания_объекта используется для создания нового экземпляра типа_класса или типа_значения.
выражение_создания_объекта: new тип ( список_аргументовнеобязательно ) инициализатор_объекта_или_коллекциинеобязательно new тип инициализатор_объекта_или_коллекции
инициализатор_объекта_или_коллекции: инициализатор_объекта инициализатор_коллекции
Тип выражения_создания_объекта должен быть равен типу_класса, типу_значения или параметру_типа. Тип не может быть типом_класса abstract.
Во время выполнения обработка выражения_создания_объекта в виде new T(A), где T является типом_класса или типом_структуры, а A является необязательным списком_аргументов, включает следующие этапы.
-
Если T является типом_класса:
-
Создается новый экземпляр класса T.
-
Все поля нового экземпляра инициализируются с помощью значений по умолчанию.
-
В соответствии с правилами вызова функции-члена вызывается конструктор экземпляра. Ссылка на созданный экземпляр автоматически передается конструктору экземпляра, и к этому экземпляру можно обращаться из этого конструктора с помощью this.
-
Если T является типом_структуры:
-
С помощью выделения временной локальной переменной создается экземпляр типа T. Поскольку для явного присвоения значений каждому полю создаваемого экземпляра требуется конструктор экземпляра типа_структуры, инициализация временной переменной не требуется.
-
В соответствии с правилами вызова функции-члена вызывается конструктор экземпляра. Ссылка на созданный экземпляр автоматически передается конструктору экземпляра, и к этому экземпляру можно обращаться из этого конструктора с помощью this.
Оператор typeof
Оператор typeof используется для получения объекта System.Type для типа.
Пример
System.Type type = typeof(int);
Пример
using System;
namespace ConsoleApplication7
{
class Employee
{
private string name;
private string alias;
private decimal salary = 3000.00m;
// Constructor:
public Employee(string name, string alias)
{
// Use this to qualify the fields, name and alias:
this.name = name;
this.alias = alias;
}
// Printing method:
public void printEmployee()
{
Console.WriteLine("Name: {0}\nAlias: {1}", name, alias);
// Passing the object to the CalcTax method by using this:
Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this));
}
public decimal Salary
{
get { return salary; }
}
}
class Tax
{
public static decimal CalcTax(Employee E)
{
return 0.08m * E.Salary;
}
}
class Program
{
static void Main(string[] args)
{
Employee E1 = new Employee("Mingda Pan", "mpan");
// Display results:
E1.printEmployee();
Type t = typeof(Employee);
// Alternatively, you could use
// SampleClass obj = new SampleClass();
// Type t = obj.GetType();
Console.WriteLine("Methods:");
System.Reflection.MethodInfo[] methodInfo = t.GetMethods();
foreach (System.Reflection.MethodInfo mInfo in methodInfo)
Console.WriteLine(mInfo.ToString());
Console.WriteLine("Members:");
System.Reflection.MemberInfo[] memberInfo = t.GetMembers();
foreach (System.Reflection.MemberInfo mInfo in memberInfo)
Console.WriteLine(mInfo.ToString());
}
}
}