C#类分离为头文件和.cs文件

C#类分离为头文件和.cs文件,c#,class,C#,Class,有没有办法将C#类拆分为包含类定义的头文件和包含实现的实际.cs文件?我想可以通过创建一个接口来实现这一点,但这似乎并不正确。我只想要一个文件,在那里我可以看到类的设计,而不是所有的细节。这是很容易做到的C++,但我没有看到它做了与C。 提前感谢。这不是IDE的用途吗 编辑:否则,可以使用推断面和抽象类。不,在C#中没有这样做的方法(或真正的原因)。您可以让VS.NET为您总结一个类(在“视图”菜单中全部折叠),或者如果您真的想这样做,您可以使用一个接口。你问这个问题的原因是什么?试试类视图。单

有没有办法将C#类拆分为包含类定义的头文件和包含实现的实际.cs文件?我想可以通过创建一个接口来实现这一点,但这似乎并不正确。我只想要一个文件,在那里我可以看到类的设计,而不是所有的细节。这是很容易做到的C++,但我没有看到它做了与C。
提前感谢。

这不是IDE的用途吗


编辑:否则,可以使用推断面和抽象类。

不,在C#中没有这样做的方法(或真正的原因)。您可以让VS.NET为您总结一个类(在“视图”菜单中全部折叠),或者如果您真的想这样做,您可以使用一个接口。你问这个问题的原因是什么?

试试类视图。单击每个类时,您将获得列出的成员。

在同一文件中,您可以使用Visual Studio大纲功能折叠该类,以便只看到方法和属性的名称

您还可以使用VisualStudio查看类视图,该视图提供了类的各种方法和属性的名称


在dotnet中,几乎没有理由需要在与其实现分离的位置定义类。

您可以使用分部类和分部方法。我不知道你为什么要这么做


当您有一个实例后跟“.”like时,IDE将准确地显示该内联

myBadlyNamedObject

(或“ClassName”),其美妙之处在于,当您处理对象时,它就在您的指尖,而不是当您决定打开对象定义以查看它可能是什么时,这是一种错误的方法。C是不是C++。strong>忘记头文件


如果需要类摘要,只需在Visual Studio中打开对象浏览器。它会给你在你的类中所有方法的签名。

< P>我不认为你可以像C++一样做头文件。
检查类和方法的partial关键字。我昨天才了解它们,所以我还没有真正使用它们,但它们可能会帮助你完成你想做的事情。

据我所知,这是不可能的。但是,通过使用分部类,您可以将一个类的不同部分放在不同的文件中,从而使事情变得更好。例如,您可以将所有公共方法放在一个文件中,将所有私有方法放在一个文件中,以便更容易地从其他对象中获得可用方法的概览。

您可以使用
接口来实现相同的目的

IFoo.cs:

public interface IFoo
{
  int DoFoo();
}
Foo.cs:

public class Foo : IFoo
{
  public int DoFoo()
  {
    return 1;
  }
}

如果你真的,真的需要这样做,那么最接近的选择就是 重构-->提取接口。

对于所有说“使用IDE~!~”的人,你没有抓住要点。代码并不总是在IDE中读取。也许他想把它打印出来?还是发电子邮件?这就是不实现语言特性的问题,因为您可以让IDE来实现它:代码并不总是在IDE中读取(甚至写入)


也就是说,您可以使用分部类和方法来实现这一点;但是,我认为不能在两个文件中都包含实例变量。

如果您对私有方法感兴趣,提取接口不是一个好计划。 使用抽象类意味着实质性地改变应用程序的设计(我认为,不必要地增加复杂性),以支持“视图”需求。分部类不会在一个位置显示完整的公共和私有签名,因此这也不理想

因此,如果您没有IDE,或者不想使用它,我会在Reflector中使用默认的反汇编操作(免费,无论如何都是一个很好的玩具):

例如,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; }
}

<>这只是C++的一个特性,因为古编译器需要函数签名的前向声明才能正确工作。 如果这是您觉得方便的东西,并且您不止一次地想要它,那么您可以尝试编写一个小实用程序,使用反射从任何组件提取公共接口,并将其格式化为您想要的任何布局的文本文件


另一种选择是使用///Framework为类创建XML文档。

WiCV是.NET 1框架SDK实用工具,它为您提供了.NET程序集的C++类头视图。在google上搜索wincv.exe,了解如何将其配置为.net 2.0。

您可以始终使用分部类

我不是投票否决您的人,但我喜欢避免只由一个类实现的接口。