2010-08-12 2 views
0

Для программы, которую я создаю, я использую object для хранения значений атрибутов HTML. Есть куча вещей, которые я делаю с этими значениями во всей программе. Поэтому в основном я хотел бы создать псевдоним для object всякий раз, когда используется для хранения значений атрибутов HTML примерно до AttrValue, чтобы сделать программу более понятной и иметь возможность легко добавлять функциональность, если это необходимо. Эти объекты используются в критически важных частях программы, поэтому я не уверен, что создание класса вместо структуры будет лучшей идеей. Что это было бы лучшим решением здесь, если производительность является главной проблемой (на самом деле, чем ясна)?Объект подкласса C#?

+0

Знаете ли вы о интерфейсах и/или наследовании? – strager

+0

Я не понимаю, что вы говорите. «создать псевдоним для объекта» - что это значит? –

+0

@ Kirk Woll, Кажется, @jsoldi хочет, чтобы в их системе была безопасность типов. – strager

ответ

2

Вы можете создать псевдоним типа using AttrValue = System.Object;. Однако этот псевдоним будет существовать только в вашем исходном коде. Ничего не мешает вам использовать, скажем, object или string, где вам нужен AttrValue. Вы не сможете добавлять свойства или методы в свой псевдоним AttrValue: он будет псевдонимом для object, а не классом в своем собственном праве.

Возможно, вам лучше представить AttrValue как самостоятельный класс, предположительно в качестве обертки для значения типа object. Он может иметь одно поле (типа object) и конструктор, который принимает один параметр object.

Что касается структуры против класса, я бы не стал беспокоиться об этом. Вы почти никогда не нуждаетесь в структуре в .NET-коде: сборщик мусора способен обрабатывать множество экземпляров небольшого класса без заметных накладных расходов, а structs have their own oddities (в основном потому, что то, что похоже на один и тот же экземпляр в исходном коде, может в итоге оказаться двумя отдельными экземплярами на время выполнения).

+0

Я верю, что если я использую 'using AttrValue = System.Object', мне нужно будет поместить это в каждый файл, для которого мне нужен объект, который будет сглажен правильно? – Juan

+0

Справа - псевдонимы типа C# существуют только на уровне исходного кода. В скомпилированном коде вы не увидите 'AttrValue', только' object'. –

1

Ну, первый вопрос ... Почему вы используете object?

HTML - это текст, и поэтому все атрибуты html являются строками. Вы можете конвертировать их в другой тип данных (ints или enums), но сохранение их в качестве объектов не поможет.

+0

Некоторые из них, как и цвет текста, рассматриваются как целые числа в моей программе. – Juan

+0

Затем, после преобразования их в int, сохраните их в int. –

+0

, но некоторые другие строки – Juan

0

Если наследование было проблемой производительности, .NET имел бы некоторые серьезные проблемы. Наследование является фундаментальной концепцией в C#, и оно работает и отлично работает. Я предлагаю вам создать класс потомков и использовать его.

public class HtmlAttrValue: System.Object; 

Если вы действительно хотите, вы можете также создать псевдоним типа в C#, хотя и не так хорошо, как некоторые другие языки. Алиас типа в C# применяется только к файлу, в котором он определен.

using HtmlAttrValue = System.Object; 

Это плохо поддерживается и не очень хорошо известны, и я не рекомендую. Вам также может быть удобнее рассматривать ваш HTML как XHTML (если это возможно) и использовать некоторые из существующих типов и классов XML для вашей работы за вас.

+0

Вы можете оставить «: System.Object» из объявления класса, так как он неявный. –

+0

OK, теперь, если я использую 'public class HtmlAttrValue: System.Object {}' Как получить доступ к базовому объекту? Я имею в виду, если в моей программе сейчас я делаю это: ' void SomeFunc (object rawValue) { объект attrValue = rawValue; } ' Как я буду это делать, когда' attrValue' является экземпляром 'AttrValue'? Должен ли я добавить поле 'object' в класс' AttrValue', даже если класс является «объектом»? – Juan

Смежные вопросы