Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2009, 16:01   #1
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию Создать свой упакованный тип в C#

Можно ли в C# создавать свои упакованные типы (типы-значения), такие как string, int, double.

Если создавать их можно, то можно ли наследовать их от встроенных типов?? например от string.

Мне просто хочется создать свой тип string и добавить в него методы, которыми мне было бы удобно использовать, но в это же время чтобы этот тип можно было так же легко использовать, как значение!

типа такого:
Код:
MyString s = "sdfsdfsdf";
s.MyMethod();
Ещё раз повторюсь что при всем при этом желательно сохранить функционал, заложенный в стандартном стринге, чтобы мне не пришлось писать свои компораторы и сплитеры!
Никки вне форума Ответить с цитированием
Старый 25.10.2009, 11:49   #2
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

Всё! Разобрался! Свои типы создавать нельзя, но можно добавлять расширяющие методы к стандартным типам.

http://msdn.microsoft.com/en-us/library/bb383977.aspx

вот что я нарасширял:

Код:
using System;

namespace Ext
{
    public static class StrExt
    {
        // строки
        public static Int16 ToInt16(this String value)
        {
            return Convert.ToInt16(value);
        }
        public static Int32 ToInt32(this String value)
        {
            return Convert.ToInt32(value);
        }
        public static Int64 ToInt64(this String value)
        {
            return Convert.ToInt64(value);
        }
        public static Double ToDouble(this String value)
        {
            return Convert.ToDouble(value);
        }
        public static DateTime ToDateTime(this String value)
        {
            return Convert.ToDateTime(value);
        }
        public static Char ToChar(this String value)
        {
            return Convert.ToChar(value);
        }

        // типы-значения
        public static Int16 ToInt16(this ValueType value)
        {
            return Convert.ToInt16(value);
        }
        public static Int32 ToInt32(this ValueType value)
        {
            return Convert.ToInt32(value);
        }
        public static Int64 ToInt64(this ValueType value)
        {
            return Convert.ToInt64(value);
        }
        public static double ToDouble(this ValueType value)
        {
            return Convert.ToDouble(value);
        }
        public static double Sqrt(this ValueType value)
        {
            return Math.Sqrt(value.ToDouble());
        }
        public static double Pow(this ValueType value, double To)
        {
            return Math.Pow(value.ToDouble(), To);
        }
        public static double Round(this ValueType value, int digits)
        {
            return Math.Round(value.ToDouble(), digits);
        }

        // массив типов-значений (при вызове у строк происходит ошибка!)
        public static double Max(this System.Collections.ICollection value)
        {
            double max = 0;
            foreach (ValueType x in value) if (x.ToDouble() > max) max = x.ToDouble();
            return max;
        }
        public static double Min(this System.Collections.ICollection value)
        {
            double min = value.Max();
            foreach (ValueType x in value) if (x.ToDouble() < min) min = x.ToDouble();
            return min;
        }
    }
}
Теперь для приведения строки к целому типу мне не надо писать Convert.ToInt32(s), мне достаточно написать s.ToInt32. Правда ведь удобно??? Ну ещё и других подобных штук туда навставлял, кто хочет может использовать!
Никки вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как мне создать свой тип данных PilGrim Общие вопросы .NET 1 05.11.2008 19:12
Как создать свой компонент? Д'якон Компоненты Delphi 1 21.05.2008 16:37
Как создать свой формат? Rahim1993 Общие вопросы Delphi 2 04.03.2008 17:04
Свой тип данных в Delphi - сверх длинные числа - хранение в переменных размером до 1 MB KLaiM Общие вопросы Delphi 9 16.06.2007 09:13