Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Особенности производительности





При проектировании таких классов, как коллекция, в которой должны обрабатываться любые типы объектов, можно создать члены класса, принимающие экземпляр классаObject. Однако процесс упаковки-преобразования и распаковки-преобразования типа приводит к снижению производительности. Если известно, что новый класс будет часто обрабатывать значения определенных типов, для минимизации снижения производительности в результате упаковки-преобразования можно прибегнуть к одной из двух тактик.

· Создать общий метод, который принимает тип Object и набор перегруженных метода для определенного типа, которые принимают каждый тип значения предполагается, что класс часто для обработки. При наличии особого метода для определенного типа, принимающего тип параметра вызова, вызывается этот особый метод, и упаковка-преобразование не происходит. Если у метода нет аргумента, совпадающего по типу с параметром вызова, вызывается общий метод и выполняется упаковка-преобразование.

· Создайте пользовательский тип и его члены для использования универсальных шаблонов. Среда CLR при создании экземпляра класса создает закрытый универсальный тип и задает для него аргумент. Универсальный метод задается для определенного типа и его можно вызывать без упаковки-преобразования и параметра вызова.

 

Хотя иногда нужно разрабатывать именно классы общего назначения, принимающие и возвращающие типы Object, для повышения производительности можно также создать особые классы для конкретных часто используемых типов. Например, создав особый класс, задающий и возвращающий логические значения, можно избежать затрат на упаковку-преобразование и распаковку-преобразование значений такого типа.

 

В следующем примере кода определяется производный от класса Object тип Point, и осуществляется переопределение множества виртуальных методов класса Object. Кроме того, в этом примере показывается, как вызывать многие из статичных методов и методов экземпляра класса Object.

 

using System;

// The Point class is derived from System.Object.
class Point
{
publicint x, y;

public Point(int x, int y)
{
this.x = x;
this.y = y;
}

publicoverridebool Equals(object obj)
{
// If this and obj do not refer to the same type, then they are not equal.
if (obj.GetType()!= this.GetType()) returnfalse;

// Return true if x and y fields match.
Point other = (Point) obj;
return (this.x == other.x) && (this.y == other.y);
}

// Return the XOR of the x and y fields.
publicoverrideint GetHashCode()
{
return x ^ y;
}

// Return the point's value as a string.
publicoverride String ToString()
{
return String.Format("({0}, {1})", x, y);
}

// Return a copy of this point object by making a simple field copy.
public Point Copy()
{
return (Point) this.MemberwiseClone();
}
}

publicsealedclass App {
staticvoid Main()
{
// Construct a Point object.
Point p1 = newPoint(1,2);

// Make another Point object that is a copy of the first.
Point p2 = p1.Copy();

// Make another variable that references the first Point object.
Point p3 = p1;

// The line below displays false because p1 and p2 refer to two different objects.
Console.WriteLine(Object.ReferenceEquals(p1, p2));

// The line below displays true because p1 and p2 refer to two different objects that have the same value.
Console.WriteLine(Object.Equals(p1, p2));

// The line below displays true because p1 and p3 refer to one object.
Console.WriteLine(Object.ReferenceEquals(p1, p3));

// The line below displays: p1's value is: (1, 2)
Console.WriteLine("p1's value is: {0}", p1.ToString());
}
}

// This code example produces the following output:
//
// False
// True
// True
// p1's value is: (1, 2)
//

 

(https://msdn.microsoft.com/ru-ru/library/system.object(v=vs.110).aspx)

 

Date: 2015-07-17; view: 433; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию