Разделение класса C # на заголовок и файл .cs - PullRequest
3 голосов
/ 22 сентября 2008

Есть ли способ разделить класс C # на заголовок, который содержит определение класса, а затем фактический файл .cs, который содержит реализацию? Я полагаю, что это можно сделать, создав интерфейс, но это не так. Я просто хочу файл, в котором я могу просто увидеть дизайн класса, а не все детали. Это достаточно легко сделать в C ++, но я не видел, чтобы это делалось с C #.

Заранее спасибо.

Ответы [ 16 ]

23 голосов
/ 22 сентября 2008

Это неправильный подход. C # не C ++. Забудьте о заголовочных файлах .

Если вы хотите получить сводку классов, просто откройте Обозреватель объектов в Visual Studio. Это даст вам подпись всех методов в ваших классах.

15 голосов
/ 22 сентября 2008

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

Частичные классы и методы - MSDN

10 голосов
/ 22 сентября 2008

В этом же файле вы можете использовать функцию контура Visual Studio, чтобы свернуть класс и увидеть только имена методов и свойств.

Вы также можете использовать Visual Studio для просмотра представления класса, в котором приведены имена различных методов и свойств класса.

В dotnet почти нет причин определять класс отдельно от его реализации.

2 голосов
/ 22 сентября 2008

Нет, нет способа (или реальной причины) хотеть сделать это в C #. Вы можете заставить VS.NET суммировать класс для вас (свернуть все в меню представления) или, если вы действительно хотите, как вы говорите, можете использовать интерфейс. Какова причина, по которой вы спрашиваете?

1 голос
/ 22 сентября 2008

Это была только особенность C ++, потому что древние компиляторы нуждались в предварительном объявлении сигнатур функций для правильной работы.

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

Другой альтернативой может быть использование синтаксиса /// для создания документации XML для класса.

1 голос
/ 22 сентября 2008

Извлечение интерфейсов - не лучший план, если вы заинтересованы в частных методах. Использование абстрактных классов означает существенное изменение дизайна приложения (и я думаю, что без необходимости увеличивать сложность) для поддержки требования «представления». Частичные классы не показывают полную публичную и личную подпись в одном месте, так что это тоже не идеально.

Так что, если у вас нет IDE или вы не хотите его использовать, я бы использовал стандартное действие дизассемблирования в Reflector (бесплатно, и в любом случае это отличная игрушка):

http://www.red -gate.com / продукты / отражатель / index.htm

например. System.Web.Caching.Cache

public sealed class Cache : IEnumerable
{
    // Fields
    private CacheInternal _cacheInternal;
    public static readonly DateTime NoAbsoluteExpiration;
    public static readonly TimeSpan NoSlidingExpiration;

    // Methods
    static Cache();
    [SecurityPermission(SecurityAction.Demand, Unrestricted=true)]
    public Cache();
    internal Cache(int dummy);
    public object Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);
    public object Get(string key);
    internal object Get(string key, CacheGetOptions getOptions);
    public IDictionaryEnumerator GetEnumerator();
    public void Insert(string key, object value);
    public void Insert(string key, object value, CacheDependency dependencies);
    public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);
    public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);
    public object Remove(string key);
    internal void SetCacheInternal(CacheInternal cacheInternal);
    IEnumerator IEnumerable.GetEnumerator();

    // Properties
    public int Count { get; }
    public long EffectivePercentagePhysicalMemoryLimit { get; }
    public long EffectivePrivateBytesLimit { get; }
    public object this[string key] { get; set; }
}
1 голос
/ 22 сентября 2008

Вы можете использовать interface для достижения того же намерения.

IFoo.cs:

public interface IFoo
{
  int DoFoo();
}

Foo.cs:

public class Foo : IFoo
{
  public int DoFoo()
  {
    return 1;
  }
}
1 голос
/ 22 сентября 2008

Не думаю, что вы можете создавать заголовочные файлы, как в C ++. Проверьте частичное ключевое слово для классов и методов. Я только что узнал о них вчера, поэтому я на самом деле не использовал их, но они могут помочь вам выполнить то, что вы пытаетесь сделать.

0 голосов
/ 31 июля 2010

вы всегда можете использовать частичный класс

0 голосов
/ 03 мая 2009

WinCV - это утилита SDK для .net 1.0 framework, которая предоставляет представление заголовка в формате c ++ для сборок .net. Найдите в google файл wincv.exe, как настроить его для .net 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...