Tag:

使用部分类而不是抽象类有什么好处?

我一直在阅读编程Microsoft®VisualC#®2008:语言,以便更好地理解C#以及可以用它做些什么。 我遇到过从ASP.Net的Page类中遇到的部分类。 对我来说,似乎你可以用抽象类和被覆盖的类来做部分类。 显然,一个团队将通过抽象方法控制界面,但无论如何你都会相互依赖。 如果目标是协作,则不是源控制和其他工具解决的问题。 我只是错过了部分课程的要点。 也有人可以提供真实的世界使用。

如何在C#中模拟多重inheritance

我怎样才能做到这一点: Class A : DependencyObject {} Class B : DependencyObject {} Class C : A , B {}

visual studio express:免费类图工具

我正在使用c#express,并希望使用免费工具来设计我的类图。 你对免费工具有什么建议?

是否有一种简单的方法来创建一个类的不可变版本?

有一种简单的方法可以使实例不可变吗? 让我们举个例子,我有一个包含大量数据字段的类(只有数据,没有行为): class MyObject { // lots of fields painful to initialize all at once // so we make fields mutable : public String Title { get; set; } public String Author { get; set; } // … } 创建示例: MyObject CreationExample(String someParameters) { var obj = new MyObject { Title = “foo” // lots […]

限制实例创建一个类?

我正在使用C#。 我创建了一个可以包含在任何c#.net项目中的类(基于桌面或基于Web),但我希望在我的类的应用程序中只创建10个对象。 如果对象实例创建超过10,那么它应该给出错误或简单不起作用。 可能有两种情况, 我将myclass.cs文件包含在任何项目中 我将我的类捆绑在DLL中,然后将其包含在任何应用程序中 在这两种情况下,如果在应用程序中创建了超过10个类的实例,则必须通过错误。 这个问题是我的老师问的,他告诉我在互联网上搜索答案,我试过但没有找到解决这个问题的方法,我还没有听说过我们可以限制对象? 是否可能,如果是,那么如何? 谢谢

如何在不访问源代码的情况下“深入”克隆第三方类的属性?

.NET框架的ICloneable接口通常提供了一种支持克隆类实例的方法。 但是如果我有多个第三方类 ,并且不想单独关注每个属性,那么如何有效地克隆这些类的对象呢? (这些类的源代码不可用)。 有没有办法使用generics和扩展方法 ? 我需要的是一个深度克隆,它创建一个包含所有属性和(子)对象的精确副本。 示例:假设您要在LinqPad中克隆UserQuery对象: void Main() { UserQuery uc=this; var copy=uc.CreateCopy(); // clone it } 我正在寻找的是一个CreateCopy()扩展,它允许创建一个副本,而不必处理这个类的细节,因为我没有UerQuery的源UerQuery 。 (请注意, UserQuery只是一个示例,用于显示我需要的内容,它也可以是PDF文档类,用户控件类,ADO.NET类或其他任何内容)。

是否有.NET函数来validation类名?

我正在使用CodeDom根据用户值生成动态代码。 其中一个值控制着我正在生成的类的名称。 我知道我可以根据有关使用正则表达式的有效类名的语言规则对名称进行消毒,但我想知道框架中是否有一个特定的方法来validation和/或消毒类名。

在没有不可变字段的类中重写Object.GetHashCode()时要返回什么?

好吧,在你因为互联网上发布了数百个类似的声音问题而疯狂之前,我可以向你保证,我刚刚花了最后几个小时阅读所有这些问题并且没有找到我的问题的答案。 背景: 基本上,我的一个大型应用程序遇到了ListBox.SelectedItem属性上的某些Binding将停止工作或者在对当前所选项目进行编辑后程序崩溃的情况。 我最初问过“已经添加了相同密钥的项目”这里从代码问题中选择ListBoxItem的例外 ,但没有得到答案。 直到本周,我才有时间解决这个问题。 现在简而言之,我找到了问题的原因。 这是因为我的数据类型类已经覆盖了Equals方法,因此也覆盖了GetHashCode方法。 现在对于那些不知道这个问题的人,我发现你只能使用不可变字段/属性来实现GetHashCode方法。 使用Harvey Kwok对Overriding GetHashCode()post的回答来解释这个: 问题是Dictionary和HashSet集合正在使用GetHashCode将每个项目放在存储桶中。 如果基于某些可变字段计算哈希码,并且在将对象放入HashSet或Dictionary后实际更改了字段,则无法再从HashSet或Dictionary中找到该对象。 所以实际问题是因为我在GetHashCode方法中使用了可变属性。 当用户在UI中更改了这些属性值时,对象的关联哈希码值发生了更改,然后在其集合中找不到项。 题: 所以,我的问题是处理我需要在没有不可变字段的类中实现GetHashCode方法的情况的最佳方法是什么? 对不起,让我更具体一点,因为之前已经提出了这个问题。 Overriding GetHashCode()post中的答案表明,在这些情况下,最好只返回一个常量值……有些建议返回值1 ,而其他建议返回素数。 就个人而言,我看不出这些建议之间有什么区别,因为我原本以为只会有一个桶用于其中任何一个。 此外,Eric Lippert博客中关于GetHashCode的指南和规则有一个标题为指南的部分:哈希码的分布必须是“随机的” ,这突出了使用导致使用不足的桶的算法的缺陷。 他警告说,算法会减少使用的桶数,并在桶变得非常大时导致性能问题 。 当然,返回常数属于这一类。 我想到了为我的所有数据类型类(仅在C#中,而不是数据库中)添加一个额外的Guid字段,特别是在GetHashCode方法中使用。 所以我想在这个长篇介绍的最​​后,我的实际问题是哪个实现更好? 总结一下: 摘要: 在没有不可变字段的类中重写Object.GetHashCode()时,最好从GetHashCode方法返回一个常量,还是为每个类创建一个额外的readonly字段,仅用于GetHashCode方法? 如果我应该添加一个新字段,它应该是什么类型,我不应该将它包含在Equals方法中? 虽然我很高兴收到任何人的答复,但我真的希望得到高级开发人员的答案,他们对这个主题有充分的了解。

接口和类之间的区别

正如标题所述,我想知道使用这样的类之间的区别 public class Account { public string Username { get; set; } public string Password { get; set; } } 并使用和接口这样 public class Account : IAccount { public string Username { get; set; } public string Password { get; set; } } public interface IAccount { string Username { get; set; } string Password { […]

长寿命对象的结构与类

当你需要拥有非常小的物体时,比如说它包含2个浮动属性,并且你将拥有数百万个不会被“摧毁”的物体,结构是更好的选择还是类? 就像在xna中作为库一样,有point3s等作为结构但如果你需要长时间保持这些值,它会造成性能威胁吗?