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