powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Расширение класса string
18 сообщений из 43, страница 2 из 2
Расширение класса string
    #38889878
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.Да я бы хотел так сделать!

Но Сон веры павловны прав. Придётся тащить половину mscorlib. На первый взгляд всё выглдяит несложно, а оказывается всё наоборот. Класс string ни капельки не самостоятельный и использует половину mscorlib.

Тут у меня назрел такой вопрос. А почему мой новый string2 (порождённый из исзодника string) не может использовать уже скомпилированный mscorlib, чтобы его не тащить в проект?
Потому, что есть такой модификатор доступа - internal.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889888
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Алексей Ку.Да я бы хотел так сделать!

Но Сон веры павловны прав. Придётся тащить половину mscorlib. На первый взгляд всё выглдяит несложно, а оказывается всё наоборот. Класс string ни капельки не самостоятельный и использует половину mscorlib.

Тут у меня назрел такой вопрос. А почему мой новый string2 (порождённый из исзодника string) не может использовать уже скомпилированный mscorlib, чтобы его не тащить в проект?
Потому, что есть такой модификатор доступа - internal.

А ну да...
...
Рейтинг: 0 / 0
Расширение класса string
    #38889890
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Internal классы (структуры, интерфейсы, энумы, делегаты) видны только внутри сборки, в которой объявлены (если только сборка не скомпилирована с атрибутом InternalVisibleTo - но это точно не про mscorlib и ваш проект).
Помнится, как-то я попытался подправить исходники класса SignedXml - не вышло нифига. Как раз из-за этих internal'ов.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889891
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Вам явно не нужны все методы оригинального класса String... У Вас я видел 3-5 метода для переписания (причем, на мой взгляд, элементарнейшие). Зря Вы заранее испугались, там совсем немного тащить надо. А для общего развития было бы полезно. Но смотрите сами, за Вас этого никто не сделает, но если Вас уже запугали и уверенности в собественных силах нет, делайте через Extensions - это проще и быстрее, а в Вашем случае, может, и оправданнее.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889897
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вообще все проще на самом деле. Просто сошлитесь на родной класс String и сделаете как-бы overraid нужных Вам методов. Даже исходников System.String не надо! Чо-то туплю я сегодня.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889904
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой способ переправить код на другой тип для Билдера
объявите в каком нить хидере типа вот этого

Код: pascal
1.
2.
3.
4.
MyString = AnsyString; или назовите как хотите

string =record
end;


и включите его во все модули код которых надо переводить, попутно компиля
...
Рейтинг: 0 / 0
Расширение класса string
    #38889906
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronПросто сошлитесь на родной класс String и сделаете как-бы overraid нужных Вам методов.
Родной класс System.String является sealed, если что.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889922
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныAxeleronПросто сошлитесь на родной класс String и сделаете как-бы overraid нужных Вам методов.
Родной класс System.String является sealed, если что.

Это не играет роли. Я предлагаю не наследование, а вот что:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
using System;

namespace SystemPlus
{
    public static class String
    {
         public static string Substring(this string text, int startIndex, int length)
        {
             return text.Substring(startIndex + 1, length);
        }
    }
}
...
Рейтинг: 0 / 0
Расширение класса string
    #38889945
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronЭто не играет роли. Я предлагаю не наследование, а вот что:
Это, собственно, и есть extension-методы, про которые топикстартер писал с самого начала. Вы предлагаете ему то, что он сам себе предложил? Это во-первых. А во-вторых, с вышеприведенной сигнатурой это просто не будет работать:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
namespace test
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("1234".Substring(0,1));
      Console.ReadKey(true);
    }
  }

  public static class String
  {
    public static string Substring(this string text, int startIndex, int length)
    {
      return text.Substring(startIndex + 1, length);
    }
  }
}


Прогоните этот код с закомментаренным public static class String, и с незакомментаренным, найдите отличия. Если что - компилятор в первую очередь по сигнатуре вызова ищет инстансные методы, и только не найдя их, начинает искать extensions-методы.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889965
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Ваша правда!
...
Рейтинг: 0 / 0
Расширение класса string
    #38889980
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, убедили Вы меня - лучше всего просто Extension methods использовать без извратов.
...
Рейтинг: 0 / 0
Расширение класса string
    #38889994
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

лучше говнокод переписать
...
Рейтинг: 0 / 0
Расширение класса string
    #38889997
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилAxeleron,

лучше говнокод переписать

Ну это уже меры глобального порядка
...
Рейтинг: 0 / 0
Расширение класса string
    #38890049
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо всем за помощь в этом вопросе!
...
Рейтинг: 0 / 0
Расширение класса string
    #38890676
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.Тем более эти классы постоянно развивает другая команда, а моя задача вести параллель на шарпе. Отсюда и необходимость вносить минимум изменений!Может проще сибилдерную часть оформить в виде DLL или COM и подсоединить к сишарпу инвоком/интеропом?
...
Рейтинг: 0 / 0
Расширение класса string
    #38890680
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Не, проще последовать совету Изопропила.
...
Рейтинг: 0 / 0
Расширение класса string
    #38891030
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На правах не сильно продуманной идеи:

Завернуть стринг в структуру и переопределить метходы работы со структурой.
Код: c#
1.
2.
3.
4.
5.
struct AnsiString
{
  private string str;
  public int IndexOf(AnsiString s) { return str.IndexOf(s.str) + 1; }
}
...
Рейтинг: 0 / 0
Расширение класса string
    #38896933
Leo Лапыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле делай, Алексей, класс AnsiString с внутренним членом класса String и реализуй в нём (AnsiString) только то, что используется классами, портируемыми из C++, в частности метод Substring, ещё пару-тройку каких-нибудь типа Pos и SetLength, ну и операторы +, -, =, ==, != или какие там используются...
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Расширение класса string
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]