Questions tagged «c#»

C#是Microsoft与.NET平台并行创建的一种多范式,托管的,垃圾回收的面向对象编程语言。

2
为什么在C#中有一个new()约束,但没有其他类似的约束?
在C#泛型中,我们可以说,使类型参数T具有默认构造函数的约束where T : new()。但是,没有其他像这样的约束有效(new(string)例如,等等)。 从语言设计和/或实现的角度来看,这是什么原因? 构造函数的工作方式或类型系统的实现方式是否有某些禁止(或至少使之更加困难)的东西?如果是这样,那是什么?我记得读书的地方,default(T)实际上编译到new T()了T : struct。可能与此有关吗? 还是仅仅是为了避免使语言过于复杂而做出的设计决定?

4
属性的XML文档中是否需要“获取或设置..”?
我正在寻找有关C#中XML注释的最佳实践的建议。创建属性时,预期的XML文档似乎具有以下形式: /// <summary> /// Gets or sets the ID the uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } 但是,因为该属性的签名已经告诉您该类的外部客户端可以进行哪些操作(在这种情况下,这两个操作都是get和set),所以我觉得注释太闲谈了,也许以下内容就足够了: /// <summary> /// ID that uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } Microsoft使用第一种形式,因此这似乎是一个隐含约定。但是我认为由于我所说的原因,第二种更好。 我知道此问题很容易被标记为非建设性的,但是必须评论的属性数量巨大,因此我相信这个问题有权解决。 …

6
一种编程语言,允许您为简单类型定义新的限制
许多语言一样C++,C#和Java允许你创建表示简单类型,如对象integer或float。使用类接口,您可以覆盖运算符并执行逻辑,例如检查值是否超过业务规则100。 我想知道在某些语言中是否可以将这些规则定义为变量/属性的注释或属性。 例如,C#您可能会写: [Range(0,100)] public int Price { get; set; } 或者也许C++您可以这样写: int(0,100) x = 0; 我从未见过这样的事情,但是鉴于我们在存储之前对数据验证的依赖程度。奇怪的是,该功能尚未添加到语言中。 您能否举例说明可能的语言?

6
在Metro应用程序中使用XAML / C#或HTML5 / JavaScipt的优缺点?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我只是想知道将XAML / C#或HTML5 / JavaScript用于Metro Apps是否有主要优点或缺点。
19 c#  javascript  html5  xaml  metro 

9
你应该私有财产吗?
private string mWhatever; private string Whatever { get { return this.mWhatever; } set { this.mWhatever = value; } } 我见过有人为每个成员(无论是否私有)都进行财产管理……这有意义吗?当您想控制对包含它的类中的成员的访问时,有时可以看到它在1%的情况下是有意义的,因为如果您不对每个成员使用属性,则会导致不一致并检查是否成员是否具有访问权限(因为您可以在该类的范围内访问这两者)。
19 c# 

2
为什么共享状态会降低性能?
我一直在并发编程的“不分担”原则下工作。本质上,我的所有工作线程都具有相同状态的不可变只读副本,它们之间从未共享(即使通过引用)。总体而言,这确实很好。 现在,有人引入了一个无锁单例缓存(例如静态字典),所有线程正在同时访问。由于字典在启动后永远不会更改,因此没有锁。没有任何线程安全问题,但是现在性能下降了。 问题是...由于没有锁,为什么引入此单例会导致性能下降?幕后到底发生了什么,可以解释这一点? 确认一下,唯一的改变就是访问这个新的单例,我只需注释掉对缓存的调用就可以可靠地重新创建它。

6
属性应该有副作用吗
除了通知状态改变外,C#中的属性是否还会有副作用? 我已经看到以几种不同方式使用属性。从将在首次访问值时加载值的属性到具有大量副作用(例如导致重定向到其他页面)的属性。
19 c# 

11
推荐的.NET / C#编码标准?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 您认为什么编码标准对.NET / C#项目很重要?可以这样处理花括号,间距和装饰。或者可能是一些更基本的问题,例如应避免在.NET Framework中使用哪些命名空间,配置文件的最佳做法等。 尽量避免创建简单的推论。例如,有一篇文章集中在花括号上会很好。我们不需要两种就可以支持一种样式。这个想法不是投票支持您的宠物标准,而是充实制定标准时应考虑的内容。

3
如何在不使用递归的情况下遍历树?
我的内存节点树很大,需要遍历该树。将每个子节点的返回值传递到其父节点。必须这样做,直到所有节点的数据都泡到根节点为止。 遍历是这样的。 private Data Execute(Node pNode) { Data[] values = new Data[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // recursive } return pNode.Process(values); } public void Start(Node pRoot) { Data result = Execute(pRoot); } 这工作正常,但我担心调用堆栈会限制节点树的大小。 如何重写代码,以便不进行递归调用Execute?
19 c#  optimization  trees 

4
为什么我们需要async关键字?
我刚开始在.Net 4.5中开始使用异步/等待。我最初好奇的一件事是,为什么async关键字是必需的?我读到的解释是,它是一个标记,因此编译器知道一个方法在等待。但是似乎编译器应该能够在没有关键字的情况下解决问题。那还有什么作用呢?
19 c#  .net 

4
在C#中真正使用过指针吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 在C#中编码时,使用指针是一个好选择还是必须选择的情况是什么?我说的是不安全的指针。
19 c#  pointers 

6
尝试/捕获/记录/重新抛出-是反模式吗?
我可以看到几篇文章,其中强调了在中心位置或过程边界处处理异常的重要性,这是一种好的做法,而不是乱丢try / catch周围的每个代码块。我坚信我们大多数人都了解它的重要性,但是我仍然看到人们仍然使用catch-log-threrow反模式,主要是因为在任何异常情况下,为了简化故障排除工作,他们想记录更多特定于上下文的信息(例如:方法参数)通过),方法是将方法包装在try / catch / log / rethrow周围。 public static bool DoOperation(int num1, int num2) { try { /* do some work with num1 and num2 */ } catch (Exception ex) { logger.log("error occured while number 1 = {num1} and number 2 = {num2}"); throw; } } 在保持异常处理良好实践的同时,有没有正确的方法来实现这一目标?我听说过类似PostSharp的AOP框架,但是想知道这些AOP框架是否有任何不利或主要的性能成本。 谢谢!

1
单元测试:Linq的延迟断言
可以添加这样的延迟断言吗 var actualKittens = actualKittens.Select(kitten => { Assert.IsСute(kitten); return kitten }); 为什么?因此,即使使用期望实现实例化的语句,我也可以仅迭代一次: CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList()); 而且它可能不仅是Select,而且是定义了迭代器且具有大量检查和逻辑(例如,一些计数和过滤)的方法。 令人怀疑的种子是在测试失败的情况下读取和调试此类代码的复杂性。


2
是否存在某种用于设计和实现GUI的系统策略?
我正在使用Visual Studio在C#中创建GUI应用程序。工具箱是一个漂亮的组件面板,它使我可以轻松地将按钮和其他元素(为清楚起见,每当我表示“控件”,我都会说按钮)拖放到表单上,这使得静态表单非常容易做到。但是,我遇到两个问题: 首先创建按钮需要很多工作。当我使用的表单不​​是静态的时(即,根据用户的操作在运行时创建了按钮或其他控件),我根本无法使用调色板。相反,我必须通过使用我使用的任何方法调用构造函数来手动创建每个按钮,然后通过指定按钮的高度,宽度,位置,标签,事件处理程序等手动进行初始化。这非常繁琐,因为我必须猜测所有这些修饰参数,而又看不到表格的外观,而且每个按钮都会生成许多行重复的代码。 使按钮执行某些操作也是很多工作。在功能齐全的应用程序中处理事件是一个巨大的痛苦。我知道如何执行此操作的唯一方法是选择一个按钮,转到其属性中的“事件”选项卡,单击该OnClick事件,以使其在Form的代码中生成该事件,然后填写该事件的主体。由于我想分离逻辑和表示,因此所有事件处理程序最终都是对适当的业务逻辑功能的单行调用。但是,将它用于许多按钮(例如,想象像MS Word这样的应用程序中存在的按钮数目)会Form用数十种样板事件处理程序方法污染我的代码,并且很难维护。 因此,要让我真正使用任何比Hello World更复杂的GUI程序都是不切实际的。明确地说,在编写具有最小UI的程序中,处理复杂性没有任何问题-我觉得我能够使用具有相当能力的OOP来整齐地构造我的业务逻辑代码。但是在开发GUI时,我陷入了困境。似乎很乏味,以至于我感觉自己正在重新发明轮子,并且那里有一本书解释了如何正确地做GUI,而我还没有读过。 我想念什么吗?还是所有C#开发人员都只是接受无尽的重复事件处理程序和按钮创建代码列表? 作为一个(希望有帮助的)提示,我希望一个好的答案可以谈论: 使用OOP技术(例如工厂模式)简化重复按钮的创建 将许多事件处理程序组合到一个方法中,该方法检查Sender以找出哪个按钮调用了它,并相应地运行 XAML并使用WPF代替Windows窗体 你不需要有提,当然任何这些。关于我要寻找的答案,这只是我的最佳猜测。
18 c#  gui  visual-studio 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.