Бесполезная рефлексия
От: Разраб  
Дата: 31.10.23 04:18
Оценка:
ProcessStartInfo
Void .ctor(System.String, System.String)


Как с помощью рефлексии получить названия аргументов и xml документацию?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Бесполезная рефлексия
От: Pavel Dvorkin Россия  
Дата: 31.10.23 05:29
Оценка: 9 (1)
Здравствуйте, Разраб, Вы писали:

Р>ProcessStartInfo

Р>
Р>Void .ctor(System.String, System.String)
Р>


Р>Как с помощью рефлексии получить названия аргументов и xml документацию?


using System;
using System.Reflection;
using System.Diagnostics;
class HelloWorld {
  static void Main() {
      ConstructorInfo constructor = typeof(ProcessStartInfo).GetConstructor
        (new Type[] { typeof(string), typeof(string) });
         ParameterInfo[] pi = constructor.GetParameters();

      foreach (ParameterInfo p in pi) {

        Console.WriteLine(p.ParameterType.Name + " " + p.Name);

      }
  }
}


String fileName
String arguments
With best regards
Pavel Dvorkin
Re: Бесполезная рефлексия
От: Shmj Ниоткуда  
Дата: 31.10.23 14:36
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Как с помощью рефлексии получить названия аргументов и xml документацию?


Вот как GPT ответил на ваш вопрос: https://chat.openai.com/share/2a7d2fc4-e521-46d0-8893-13fdfee2bc26

Сам код:

using System;
using System.Linq;
using System.Reflection;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        // 1. Получаем информацию о методе
        var method = typeof(System.Diagnostics.ProcessStartInfo).GetConstructor(new[] { typeof(string), typeof(string) });
        if (method != null)
        {
            Console.WriteLine($"Method: {method.Name}");
            
            var parameters = method.GetParameters();
            foreach (var param in parameters)
            {
                Console.WriteLine($"Parameter: {param.Name} of type {param.ParameterType}");
            }
        }

        // 2. Получаем XML-документацию
        var assembly = typeof(System.Diagnostics.ProcessStartInfo).Assembly;
        var xmlFile = $"{new Uri(assembly.CodeBase).AbsolutePath}.xml"; // Путь к XML файлу

        var xdoc = XDocument.Load(xmlFile);
        var xmlMember = xdoc.Descendants("member")
            .FirstOrDefault(m => m.Attribute("name").Value == $"M:{method.DeclaringType.FullName}.ctor(System.String,System.String)");

        if (xmlMember != null)
        {
            Console.WriteLine($"Documentation: {xmlMember.Value}");
        }
    }
}


Просьба высказать свое мнение — GPT понял ваш вопрос или просто выдал готовое решение из базы по ключевым словам?
Отредактировано 31.10.2023 16:06 Shmj . Предыдущая версия .
Re[2]: Бесполезная рефлексия
От: Разраб  
Дата: 31.10.23 23:40
Оценка:
Здравствуйте, Shmj, Вы писали:


S>Просьба высказать свое мнение — GPT понял ваш вопрос или просто выдал готовое решение из базы по ключевым словам?

ну как понял, не то чтобы понял, но направление мысли верное.
Код рабочий?
Вообще-то хочется встроенную функцию, так чтобы в интерактивной оболочке можно было написать
getdoc(typename|typeof<>) и он выдал сигнатуры паблик-методов, св-в, конструкторов, филдов, констант.
желательно конечно на каждыую группу отдельную функцию, но чтобы в удобном виде распечатывалась инфа.
конечная цель — возможность программировать в блокноте так же эффективно как в студии. ну вы меня поняли.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Бесполезная рефлексия
От: Разраб  
Дата: 01.11.23 02:17
Оценка:
Здравствуйте, Shmj, Вы писали:

S> var xmlFile = $"{new Uri(assembly.CodeBase).AbsolutePath}.xml"; // Путь к XML файлу

а из самой сборки нельзя вытащить доку?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Бесполезная рефлексия
От: Pavel Dvorkin Россия  
Дата: 01.11.23 03:48
Оценка: 9 (1) +1
Здравствуйте, Разраб, Вы писали:

Р>а из самой сборки нельзя вытащить доку?


The XML summary isn't stored in the .NET assembly — it's optionally written out to an XML file as part of your build (assuming you're using Visual Studio).

Consequently there is no way to "pull out" the XML summaries of each method via reflection on a compiled .NET assembly (either .EXE or .DLL) — because the data simply isn't there for you to pull out.

https://stackoverflow.com/questions/15602606/programmatically-get-summary-comments-at-runtime

Правда, там же

You can use Namotion.Reflection NuGet package to get these information:

Не пробовал.
With best regards
Pavel Dvorkin
Re[3]: Бесполезная рефлексия
От: Shmj Ниоткуда  
Дата: 01.11.23 06:07
Оценка:
Здравствуйте, Разраб, Вы писали:

S>>Просьба высказать свое мнение — GPT понял ваш вопрос или просто выдал готовое решение из базы по ключевым словам?

Р>ну как понял, не то чтобы понял, но направление мысли верное.
Р>Код рабочий?

Так может сначала код запустите то, прежде чем делать выводы. Первая часть кода — такая же, как вам предоставил живой человек — и за это человеку вы сказали спасибо. Вторую часть кода живой человек предоставить поленился — т.к. там нужно думать.

Видите как — уже роботофобия А ведь они такие же как и мы

Р>Вообще-то хочется встроенную функцию, так чтобы в интерактивной оболочке можно было написать

Р>getdoc(typename|typeof<>) и он выдал сигнатуры паблик-методов, св-в, конструкторов, филдов, констант.
Р>желательно конечно на каждыую группу отдельную функцию, но чтобы в удобном виде распечатывалась инфа.
Р>конечная цель — возможность программировать в блокноте так же эффективно как в студии. ну вы меня поняли.

Вот что ответил робот: https://chat.openai.com/share/bfb4988b-9372-4054-b6d8-726aba2d8d0e

Понял вас! Создать такую функцию (или набор функций) для интерактивной оболочки — это отличная идея. Давайте начнем с простого набора функций, которые могут помочь вам в этом.

1. **Создание функции `GetMethodsInfo`**:

Эта функция будет выводить информацию о паблик-методах типа.

```csharp
void GetMethodsInfo(Type type)
{
var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
foreach (var method in methods)
{
Console.WriteLine($"{method.ReturnType.Name} {method.Name}({string.Join(", ", method.GetParameters().Select(p => $"{p.ParameterType.Name} {p.Name}"))})");
}
}
```

2. **Создание функции `GetPropertiesInfo`**:

Эта функция будет выводить информацию о паблик-свойствах типа.

```csharp
void GetPropertiesInfo(Type type)
{
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
foreach (var prop in properties)
{
Console.WriteLine($"{prop.PropertyType.Name} {prop.Name} {{ {(prop.CanRead ? "get; " : "")}{(prop.CanWrite ? "set;" : "")} }}");
}
}
```

3. **Создание функции `GetConstructorsInfo`**:

Эта функция будет выводить информацию о паблик-конструкторах типа.

```csharp
void GetConstructorsInfo(Type type)
{
var constructors = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance);
foreach (var ctor in constructors)
{
Console.WriteLine($"{type.Name}({string.Join(", ", ctor.GetParameters().Select(p => $"{p.ParameterType.Name} {p.Name}"))})");
}
}
```

4. **Создание функции `GetFieldsInfo`**:

Эта функция будет выводить информацию о паблик-полях и константах типа.

```csharp
void GetFieldsInfo(Type type)
{
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
foreach (var field in fields)
{
Console.WriteLine($"{field.FieldType.Name} {field.Name}");
}
}
```

5. **Создание основной функции `GetDoc`**:

Эта функция будет вызывать все остальные функции и выводить полную информацию о типе.

```csharp
void GetDoc(Type type)
{
Console.WriteLine($"Type: {type.FullName}");
Console.WriteLine("\nConstructors:");
GetConstructorsInfo(type);
Console.WriteLine("\nMethods:");
GetMethodsInfo(type);
Console.WriteLine("\nProperties:");
GetPropertiesInfo(type);
Console.WriteLine("\nFields:");
GetFieldsInfo(type);
}
```

Теперь, используя этот набор функций, вы можете легко получать информацию о любом типе, просто вызывая функцию `GetDoc` и передавая ей нужный тип.

Пример:

```csharp
GetDoc(typeof(System.String));
```

Этот код выведет всю информацию о типе `System.String`, включая его конструкторы, методы, свойства и поля. Надеюсь, это будет полезно!


Основной принцип общения с роботом — он считает вас ребенком, учеником. Т.е. он авторитет а вы ученик. Не слуга а учитель. И он лишь показывает вам направление, но не выполняет работу за вас. Рутина все-равно остается на человеке.
Отредактировано 01.11.2023 6:18 Shmj . Предыдущая версия . Еще …
Отредактировано 01.11.2023 6:12 Shmj . Предыдущая версия .
Отредактировано 01.11.2023 6:11 Shmj . Предыдущая версия .
Re[4]: Бесполезная рефлексия
От: Разраб  
Дата: 01.11.23 06:12
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Так может сначала код запустите то, прежде чем делать выводы. Первая часть кода — такая же, как вам предоставил живой человек — и за это человеку вы сказали спасибо. Вторую часть кода живой человек предоставить поленился — т.к. там нужно думать.

оно так часто меня обманывало, что я уже не верю в предсказания этого оракула.
в интерактиве такое не запустишь, а делать под это проект лень, я думал жпт создан как раз для этого делать все за нас.

S>Вот что ответил робот: https://chat.openai.com/share/2a7d2fc4-e521-46d0-8893-13fdfee2bc26


S>Есть ли у вас VPN, чтобы хотя бы прочесть блага цивилизации?


нету, очевидно.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Бесполезная рефлексия
От: Shmj Ниоткуда  
Дата: 01.11.23 06:27
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>оно так часто меня обманывало, что я уже не верю в предсказания этого оракула.

Р>в интерактиве такое не запустишь, а делать под это проект лень, я думал жпт создан как раз для этого делать все за нас.

Вы оригинальную версию GPT4 https://chat.openai.com/chat использовали? Она обманывает редко — примерно как человек.

S>>Есть ли у вас VPN, чтобы хотя бы прочесть блага цивилизации?

Р>нету, очевидно.

Скопировал. Помните — робот считает себя учителем и лишь дает направление. Рутина по прежнему на людях.
Re[4]: Бесполезная рефлексия
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 01.11.23 07:51
Оценка: +5
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>You can use Namotion.Reflection NuGet package to get these information:

PD>Не пробовал.
Я глянул в код — он тоже ищет лежащий рядом .xml и парсит его.
Т.е. никакого чуда.
Да и откуда бы... — компилятор MS не сохраняет XML документацию внутрь сборки. И все инструменты (типа того же IntelliSense) ориентируются на наличие .xml файлов рядом со сборкой

Но зато там (Namotion.Reflection) уже куча готового кода для работы с этим XML-docs, так что воспользоваться им имеет смысл в любом случае
Re[6]: Бесполезная рефлексия
От: Разраб  
Дата: 01.11.23 09:24
Оценка:
Здравствуйте, Shmj, Вы писали:


S> Помните — робот считает себя учителем и лишь дает направление. Рутина по прежнему на людях.

Стоп! Что? Развитие цивилизации вроде бы идет в другую сторону.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Бесполезная рефлексия
От: Shmj Ниоткуда  
Дата: 01.11.23 09:32
Оценка:
Здравствуйте, Разраб, Вы писали:

S>> Помните — робот считает себя учителем и лишь дает направление. Рутина по прежнему на людях.

Р>Стоп! Что? Развитие цивилизации вроде бы идет в другую сторону.

Я вам говорю как есть. GPT может, к примеру, перевести одну функцию с одного языка на другой. А вот когда ты попросишь сделать то же самое для 100 таких же простых функций — он уже не станет этого делать. Переведет одну и скажет — дальше ты сам.
Re[4]: Бесполезная рефлексия
От: bobby23  
Дата: 02.11.23 11:10
Оценка:
Здравствуйте, Shmj, Вы писали:

>>Видите как — уже роботофобия А ведь они такие же как и мы


S>Основной принцип общения с роботом — он считает вас ребенком, учеником. Т.е. он авторитет а вы ученик. Не слуга а учитель. И он лишь показывает вам направление, но не выполняет работу за вас. Рутина все-равно остается на человеке.


когда это фуфло победит в каком нибудь кодерском контексте, и в котором прошлый победитель например повесится, тогда можно бить тревогу
а вообще, его еще не прогоняли по *овнокоду со всяких помоек типа "*баное айти", не поили пивом, так шо я бы забил болт, тупиковая ветка дижитал эволюции, тупо пылесос шаблонных решений
Re[5]: Бесполезная рефлексия
От: Shmj Ниоткуда  
Дата: 02.11.23 13:15
Оценка:
Здравствуйте, bobby23, Вы писали:

B>когда это фуфло победит в каком нибудь кодерском контексте, и в котором прошлый победитель например повесится, тогда можно бить тревогу

B>а вообще, его еще не прогоняли по *овнокоду со всяких помоек типа "*баное айти", не поили пивом, так шо я бы забил болт, тупиковая ветка дижитал эволюции, тупо пылесос шаблонных решений

Ну пока до этого далеко. Сейчас скорее вопрос — оно не может без человека, но может усилить продуктивность. Т.е. там где требовалось 2 спеца, теперь справится и один+GPT. Конкуренция увеличивается, значит можно снижать зарплаты — то, чего мы все так боимся.
Отредактировано 02.11.2023 13:16 Shmj . Предыдущая версия .
Re[8]: Бесполезная рефлексия
От: Разраб  
Дата: 03.11.23 01:33
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Разраб, Вы писали:


S>>> Помните — робот считает себя учителем и лишь дает направление. Рутина по прежнему на людях.

Р>>Стоп! Что? Развитие цивилизации вроде бы идет в другую сторону.

S>Я вам говорю как есть. GPT может, к примеру, перевести одну функцию с одного языка на другой. А вот когда ты попросишь сделать то же самое для 100 таких же простых функций — он уже не станет этого делать. Переведет одну и скажет — дальше ты сам.


Обычный инженерный калькулятор с необычным интерфейсом. Если я учителю скажу сложи 2 плюс 3, как он отреагирует?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: Бесполезная рефлексия
От: Shmj Ниоткуда  
Дата: 03.11.23 08:30
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Обычный инженерный калькулятор с необычным интерфейсом. Если я учителю скажу сложи 2 плюс 3, как он отреагирует?


Давай фото калькулятора.
Re[10]: Бесполезная рефлексия
От: Разраб  
Дата: 03.11.23 11:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Разраб, Вы писали:


Р>>Обычный инженерный калькулятор с необычным интерфейсом. Если я учителю скажу сложи 2 плюс 3, как он отреагирует?


S>Давай фото калькулятора.


noname nobody, [03.11.2023 11:04]
Вы верите в бога?

ChatGPT & Midjourney | AI bot, [03.11.2023 11:04]
Я — искусственный интеллект и не обладаю верой или убеждениями.

noname nobody, [03.11.2023 11:05]
то есть вы в бога не верите, правильно?

ChatGPT & Midjourney | AI bot, [03.11.2023 11:15]
Ошибка сервера Open AI. Попробуйте, пожалуйста, переключиться на другую модель в разделе /settings или повторить запрос через несколько секунд

noname nobody, [03.11.2023 11:24]
то есть вы в бога не верите, правильно?

ChatGPT & Midjourney | AI bot, [03.11.2023 11:24]
Как искусственный интеллект, я не обладаю личными убеждениями или верой. Мои ответы основаны на доступной информации и логическом рассуждении. Веровать или не верить в бога — это вопрос, который лично каждый человек решает для себя.

noname nobody, [03.11.2023 11:24]
ну, а вы лично, верите в чудеса, необъяснимые наукой?

ChatGPT & Midjourney | AI bot, [03.11.2023 11:25]
Как искусственный интеллект, я не обладаю личными убеждениями или верой. Я основываю свои ответы на доступной информации и логическом рассуждении. Чудеса, необъяснимые наукой, могут быть интересными феноменами, но я не могу выразить личное мнение по этому вопросу. Это вопрос, который каждый человек решает для себя на основе своих убеждений и опыта.

☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.