C++ как располагаются методы?

121
18 января 2020, 02:20
  1. К примеру есть файл .cpp, в нем есть метод, который не относится не к какому пространству method(wchar_t ch) { .. } куда этот метод по факту может относиться, если переводить его на c#, создание отдельного статического класса для таких групп методов?
  2. Есть класс, он описан и тд, но я заметил в нем есть "вызова" методов, без всякого описания, то есть даже значения не передаются static Class^ FromString(String ^ Source, keyType type, bool surround); но эти методы описываются ниже класса не в каком либо namespace namespace::class::method(String^ mng_str_ref, keyType type, bool surround) { .. } как это работает например в c#? не могу сопоставить такую работу, похоже чуток на работу интерфейса, аналог что в классе описали такой методов, где то вне namespace его реализовали... Бред какой то. Помогите понять работу
Answer 1

К примеру есть файл .cpp, в нем есть метод, который не относится не к какому пространству method(wchar_t ch) { .. } куда этот метод по факту может относиться, если переводить его на c#, создание отдельного статического класса для таких групп методов?

В C# нет глобальных методов, так что да, метод должен быть объявлен как статический член класса. Однако, начиная с C# 6.0, можно использовать using static, чтобы обращаться к статическому методу без указания типа:

public static class MyClass
{    
    public static int Foo(int x,int y)
    {
        return x + y;
    }
}
using static ConsoleApplication1.MyClass;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Foo(1, 2));
    }       
}

Есть класс, он описан и тд, но я заметил в нем есть "вызова" методов, без всякого описания, то есть даже значения не передаются ... но эти методы описываются ниже класса не в каком либо namespace ... как это работает например в c#?

В С++ разделение объявления и реализации используется, чтобы вынести в заголовочный файл только объявления методов. Это необходимо в связи с правилами языка касательно повторного определения функций (заголовочные файлы включаются во многих местах программы, а не-inline функция может быть определена только один раз). В C# нет необходимости разделять объявление и реализацию, так как нет понятия заголовочных файлов и вообще не используются forward declarations; язык устроен по другому. Реализации методов пишутся прямо в объявлении класса.

Если все же хочется объявить метод без реализации (например, заготовку на будущее), существуют partial-методы:

public static partial class MyClass
{
    static partial void Bar();
}
public static partial class MyClass
{
    static partial void Bar()
    {
        Console.WriteLine("Hello");
    }
}
READ ALSO
c++ cli или где типизация?

c++ cli или где типизация?

Перевожу код из c++ cli в c#Есть фрагмент когда

129
Как установить библиотечку в C# Xamarin?

Как установить библиотечку в C# Xamarin?

Нашёл на гитхабе библиотечку https://githubcom/xamarin/mqtt

111
Как добавить элемент в конец коллекции Dictionary<String, MyClass>?

Как добавить элемент в конец коллекции Dictionary<String, MyClass>?

Столкнулся с одной проблемойЕсть свойство (коллекция) Dictionary<String, MyClass> MyDic и периодически запускается метод AddValues(), который добавляет в нее...

107