2015-09-09 6 views
-1

В C++ вы можете определить части класса в отдельных файлах cpp. Так, например,Возможно ли распространять класс C# в нескольких файлах .cs, например, в C++?

Заголовок:

// Header.h 
class Example 
{ 
public: 
    bool Func1(); 
    bool Func2(); 
}; 

CPP 1

//Func1.cpp 
#include "Header.h" 
bool Example::Func1() 
{ 
    return true; 
} 

CPP 2

//Func2.cpp 
#include "Header.h" 
bool Example::Func2() 
{ 
    return false; 
} 

Можно ли в C# сделать что-то подобное? Я делаю серверные и клиентские классы, и есть некоторые методы, которые никогда не будут изменены (например, SendString, GetString, SendInt, GetInt и т. Д.), И я хотел бы отделить их от методов, которые будут активно обновляться в зависимости от того, что тип пакетов принимается.

Есть ли способ организовать код, как я пытаюсь сделать, или мне просто нужно сделать еще один класс для хранения всех методов, которые не будут дополнительно изменены?

+10

[Partial class] (https://msdn.microsoft.com/en-us/library/wa80x488.aspx) – DrewJordan

+1

@DrewJordan Вы можете проголосовать за него как ответ, чтобы быть полезным для других пользователей, t прочитать комментарии, чтобы найти ответ :) –

+1

http://stackoverflow.com/questions/3601901/why-use-partial-classes – xxbbcc

ответ

10

Partial class - подход - обычно используется для разделения автогенератора и кода, созданного пользователем. См. When is it appropriate to use C# partial classes? для случаев, когда использование имеет смысл.

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

Один из вариантов - использовать методы расширения над небольшим интерфейсом и поместить отдельные тесно сгруппированные методы в отдельные статические классы.

// Sender.cs 
// shared functionality with narrow API, consider interface 
class Sender 
{ 
    public SendByte(byte byte); 
} 

// SenderExtensions.cs 
// extensions to send various types 
static class SenderExtensions 
{ 
    public static SendShort(this Sender sender, uint value) 
    { 
     sender.SendByte(value & 0xff); 
     sender.SendByte(value & 0xff00); 
    } 
} 
1

Да, мы можем делать подобные вещи в C#. У нас есть частичный класс в C#.

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

  • Нет связанных вопросов^_^