有没有办法将 C# 类分成包含类定义的标头和包含实现的实际 .cs 文件?我想可以通过创建一个界面来做到这一点,但这似乎不对。我只想要一个文件,我可以在其中看到类设计,而不是所有细节。在 C++ 中很容易做到,但我还没有看到用 C# 完成。
提前致谢。
这是错误的做法。C# 不是 C++。忘记头文件。
如果您想要类摘要,只需在 Visual Studio 中打开对象浏览器。它将为您提供类中所有方法的签名。
您可以使用部分类和部分方法。我不确定你为什么要这样做...
在同一个文件中,您可以使用 Visual Studio 大纲功能来折叠类,以便您只看到方法和属性的名称。
您还可以使用 Visual Studio 查看类视图,它为您提供类的各种方法和属性的名称。
在 dotnet 中几乎没有理由需要在与其实现不同的地方定义一个类。
不,没有办法(或真正的理由)想要在 C# 中执行此操作。您可以让 VS.NET 为您总结一个类(在视图菜单中全部折叠),或者如果您真的想按照您所说的那样使用接口。你问背后的原因是什么?
You can use an interface
to achieve the same intention.
IFoo.cs:
public interface IFoo
{
int DoFoo();
}
Foo.cs:
public class Foo : IFoo
{
public int DoFoo()
{
return 1;
}
}
我不认为你可以像在 C++ 中那样做头文件。查看类和方法的 partial 关键字。我昨天才了解它们,所以我还没有真正使用它们,但它们可能会帮助你完成你想做的事情。
如果您对私有方法感兴趣,那么提取接口并不是一个好计划。使用抽象类意味着实质性地改变应用程序的设计(我认为,不必要地增加复杂性)以支持“视图”要求。部分类不会在一个地方向您显示完整的公共和私人签名,因此这也不理想。
因此,如果您没有 IDE,或者不想使用它,我会使用 Reflector 中的默认反汇编操作(免费,而且无论如何都是一个很棒的玩具):
http://www.red-gate.com/products/reflector/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; }
}
这只是 C++ 的一个特性,因为古代编译器需要函数签名的前向声明才能正常工作。
如果这是您觉得很方便的东西,并且您想要不止一次,您可以尝试编写一个小实用程序,使用反射从任何组件中提取公共接口,并将其格式化为您使用的任何布局的文本文件通缉。
另一种选择是使用 /// 语法为类创建 XML 文档。
如果你真的真的需要这样做,那么最接近的选项是 Refactor --> Extract interface。
对于所有说“使用 IDE 〜!〜”的人,您没有抓住重点。代码并不总是在 IDE 中读取。也许他想把它打印出来?还是发邮件?这就是不实现语言功能的问题,因为您可以让 IDE 来做:代码并不总是在 IDE 中读取(甚至写入)。
也就是说,您可以使用部分类和方法来做到这一点;但是,我认为您不能在两个文件中都有实例变量。
这不是IDE的用途吗?
编辑:否则推断和抽象类是要走的路。
尝试类视图。当您单击每个班级时,您将获得列出的成员。
当您有一个实例后跟“。”时,IDE 将准确地向您显示该内联。喜欢
myBadlyNamedObject。
(或“ClassName.”),美妙之处在于您在处理对象时触手可及,而不是在您决定打开对象定义以查看它可能是什么时
据我所知,这是不可能的。但是,您可以通过使用部分类来使事情变得更好,将类的不同部分放在不同的文件中。例如,您可以将所有公共方法放在一个文件中,将所有私有方法放在一个文件中,以便更轻松地了解哪些方法可用于其他对象。
WinCV 是一个 .net 1.0 框架 sdk 实用程序,它为您提供了一个类似 c++ 的 .net 程序集的标题视图。在 google 上搜索 wincv.exe,了解如何为 .net 2.0 配置它。
你总是可以使用部分类