Questions tagged «c#»

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

5
何时何地应使用void(而不是例如bool / int)
我偶尔会碰到一些方法,开发人员选择返回一些对函数不重要的东西。我的意思是,当看代码时,它显然void和一样好,并且经过一会儿思考,我问“为什么?” 这听起来很熟悉吗? 有时我会同意,通常最好返回一个诸如boolor的值int,而不是仅仅做一个void。从总体上看,我不确定优缺点。 根据情况,返回int可以使调用方知道受该方法影响的行或对象的数量(例如,将5条记录保存到MSSQL)。如果“ InsertSomething”之类的方法返回布尔值,那么我可以将设计为true成功的方法返回,否则返回false。呼叫者可以选择对该信息采取行动或不采取行动。 另一方面, 会导致方法调用的目的不明确吗?错误的编码经常迫使我仔细检查方法的内容。如果返回某些内容,它将告诉您该方法的类型必须对返回的结果进行某些处理。 另一个问题是,如果您不知道方法的实现,那么开发人员决定返回什么功能并不关键的东西?您当然可以发表评论。 当处理可以在方法的右括号中结束时,必须处理返回值。 引擎盖下会发生什么?调用的方法是否false由于抛出错误而得到?还是由于评估结果而返回false? 您对此有何经验?您将如何处理?

6
单个.cs文件中有多个类-是好是坏?[关闭]
建议在.cs文件中创建多个类,还是每个.cs文件都应有一个单独的类? 例如: public class Items { public class Animal { } public class Person { } public class Object { } } 一分钟就躲避一个事实,那就是这不是一个好的架构示例,.cs文件中是否有多个类才有代码味道?
30 c#  code-smell 

5
什么时候以及为什么要使用嵌套类?
使用面向对象编程,我们可以在一个类(嵌套类)中创建一个类,但是在我4年的编码经验中,我从未创建过嵌套类。 嵌套类有什么用处? 我知道如果嵌套一个类,则可以将其标记为私有,并且我们可以从包含的类中访问该类的所有私有成员。我们可以将变量作为私有变量包含在包含类本身中。 那么为什么要创建一个嵌套类呢? 在哪些情况下应使用嵌套类,或者在使用方面比其他技术更强大?

7
如何处理未处理的异常?(终止应用程序与保持活动状态)
当桌面应用程序中发生未处理的异常时,最佳实践是什么? 我当时想向用户显示一条消息,以便他可以与支持人员联系。我建议用户重新启动应用程序,但不要强行执行。与此处讨论的内容类似:ux.stackexchange.com-处理意外的应用程序错误的最佳方法是什么? 该项目是.NET WPF应用程序,因此所描述的提案可能看起来像这样(请注意,这是一个简化的示例。可能有必要隐藏异常详细信息,直到用户单击“显示详细信息”并为轻松报告错误): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact support@example.com. Exception details: {e.Exception}" + "We recommend to restart the application. " + …

4
C#6.0的新空条件运算符是否违反Demeter定律?
该德米特法律规定如下: 每个单元对其他单元的知识应该有限:只有与当前单元“紧密”相关的单元。 每个单位只能与朋友交谈;不要和陌生人说话。 只与您的直系朋友交谈。 C#6.0引入了一个称为空条件运算符的新运算符。恕我直言,它使编码更容易并提高了可读性。但这也使编写更多耦合的代码变得更容易,因为更容易在已经检查了无效性的类字段中导航(类似var x = A?.B?.C?.D?.E?.F?)。 陈述这名新操作员违反Demeter法则是否正确?

6
创建新对象还是重置每个属性?
public class MyClass { public object Prop1 { get; set; } public object Prop2 { get; set; } public object Prop3 { get; set; } } 假设我有一个对象myObject,MyClass并且需要重置其属性,那么创建一个新对象或重新分配每个属性会更好吗?假设我对旧实例没有任何其他用途。 myObject = new MyClass(); 要么 myObject.Prop1 = null; myObject.Prop2 = null; myObject.Prop3 = null;

5
Java / C#为什么不能实现RAII?
问题:Java / C#为什么不能实现RAII? 澄清:我知道垃圾收集器不是确定性的。因此,使用当前的语言功能,不可能在范围出口处自动调用对象的Dispose()方法。但是,可以添加这种确定性功能吗? 我的理解: 我认为RAI​​I的实现必须满足两个要求: 1.资源的生存期必须绑定到范围。 2.隐式的。必须在没有程序员明确声明的情况下释放资源。类似于垃圾回收器无需显式语句即可释放内存。“隐含性”仅需要在使用该类时发生。当然,类库创建者必须显式实现析构函数或Dispose()方法。 Java / C#满足点1。在C#中,可以将实现IDisposable的资源绑定到“使用”范围: void test() { using(Resource r = new Resource()) { r.foo(); }//resource released on scope exit } 这不满足第2点。程序员必须将对象明确绑定到特殊的“使用”范围。程序员可能(并且确实)忘记将资源显式绑定到作用域,从而造成泄漏。 实际上,“使用”块已由编译器转换为try-finally-dispose()代码。它具有与try-finally-dispose()模式相同的显式性质。如果没有隐式发布,则作用域的钩子就是语法糖。 void test() { //Programmer forgot (or was not aware of the need) to explicitly //bind Resource to a scope. Resource r …

11
在与基类相同的文件中声明接口,这是一种好习惯吗?
为了可互换和可测试,通常具有逻辑的服务需要具有接口,例如 public class FooService: IFooService { ... } 在设计方面,我同意这一点,但是困扰我这种方法的一件事是,对于一项服务,您需要声明两件事(类和接口),而在我们的团队中,通常需要声明两个文件(一个用于类,一个用于接口)。另一个不适之处是导航困难,因为在IDE(VS2010)中使用“转到定义”将指向该接口(因为其他类均引用该接口),而不是实际的类。 我以为将IFooService与FooService放在同一文件中会减少上述怪异现象。毕竟,IFooService和FooService非常相关。这是一个好习惯吗?IFooService必须位于其自己的文件中有充分的理由吗?

6
单元测试的预期结果应该硬编码吗?
单元测试的预期结果应该硬编码还是可以依赖于初始化变量?硬编码或计算结果是否增加了在单元测试中引入错误的风险?我还没有考虑其他因素吗? 例如,这两种格式中哪一种是更可靠的格式? [TestMethod] public void GetPath_Hardcoded() { MyClass target = new MyClass("fields", "that later", "determine", "a folder"); string expected = "C:\\Output Folder\\fields\\that later\\determine\\a folder"; string actual = target.GetPath(); Assert.AreEqual(expected, actual, "GetPath should return a full directory path based on its fields."); } [TestMethod] public void GetPath_Softcoded() { MyClass target = …
29 c#  unit-testing 

3
可选参数或重载的构造函数
我正在实现DelegateCommand,当我要实现构造函数时,我想到了以下两种设计选择: 1:具有多个重载的构造函数 public DelegateCommand(Action<T> execute) : this(execute, null) { } public DelegateCommand(Action<T> execute, Func<T, bool> canExecute) { this.execute = execute; this.canExecute = canExecute; } 2:只有一个带有可选参数的构造函数 public DelegateCommand(Action<T> execute, Func<T, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } 我不知道使用哪个,因为我不知道这两种建议的方式都有哪些优点/缺点。两者都可以这样称呼: var command = new DelegateCommand(this.myExecute); var command2 = …

8
C#泛型-如何避免冗余方法?
假设我有两个看起来像这样的类(第一段代码和一般问题与C#相关): class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } 这些类不能以任何方式进行更改(它们是第三方聚会的一部分)。因此,我不能使它们实现相同的接口,也不能继承将包含IntProperty的相同类。 我想对IntProperty两个类的属性都应用一些逻辑,在C ++中,我可以使用模板类很容易地做到这一点: template <class T> class LogicToBeApplied { public: void T CreateElement(); }; template <class T> T LogicToBeApplied<T>::CreateElement() { T retVal; retVal.IntProperty = 50; return retVal; …
28 c#  generics 

6
通用存储库有真正的优势吗?
正在阅读一些有关为新应用创建通用存储库的优势的文章(示例)。这个主意看起来不错,因为它让我可以使用同一个存储库同时为几种不同的实体类型做几件事: IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor var c1 = new Country() { Name = "United States", CountryCode = "US" }; var c2 = new Country() { Name = "Canada", CountryCode = "CA" }; var c3 = new Country() { Name = "Mexico", …

15
在两种编程语言之间来回切换是否明智?[关闭]
近两年来我一直在写很多PHP。现在,我正在进行.NET(主要是C#)开发。但是,有时我回去做一些php。 我的主要问题是,继续执行此操作是否明智?还是应该继续使用C#开发?从长远来看,这会对我造成伤害吗(请注意,我的主要目标不是成为所有交易的杰克)还是这样做是一种好习惯?

4
拦截与注入:框架架构决策
我正在帮助设计这个框架。使用某些通用组件应完成一些通用任务:特别是记录,缓存和引发事件。 我不确定是否最好使用依赖注入并将所有这些组件引入每个服务(例如属性),还是应该在每种服务方法上放置某种元数据并使用拦截来完成这些常见任务? 这是两个示例: 注射: public class MyService { public ILoggingService Logger { get; set; } public IEventBroker EventBroker { get; set; } public ICacheService Cache { get; set; } public void DoSomething() { Logger.Log(myMessage); EventBroker.Publish<EventType>(); Cache.Add(myObject); } } 这是另一个版本: 拦截: public class MyService { [Log("My message")] [PublishEvent(typeof(EventType))] public void DoSomething() …

14
新手寻求有关编程的一般建议[关闭]
需要你们中的一些人回想一下您可能不擅长编程的时代... 现在(作为软件开发人员)在我的新工作已经几个月了,已经过了试用期。几乎没有编程经验(仅C ++),并且目前正在使用asp.net MVC和silverlight。因此,有一个公司正在开发的网站,我正在努力使其变得更好,消除错误等。 问题是-通过Visual Studio了解已经建立的系统/网站。我总是感到非常不知所措,从不知道我应该看这行的哪一部分,并且通常在了解全局时遇到很多麻烦。我发现Visual Studio本身很难掌握,更不用说asp.net框架了。 我给人的印象是,因为我的同事比我更有经验,所以他们得到了所有好的工作,而我却只能做些废话-这些工作甚至都不是模糊的编程。意味着他们在学习/创造更多,而我在学习/创造几乎没有。我越来越沮丧,什么也不想说。 我并不愚蠢,我已经阅读并实践了许多基本的编程概念……我只是被该死的框架所吓倒。我看着它,只是感到瘫痪。 结果是我一直在问老一辈的老家伙,他很生气,宁愿给我轻松/无心/非编程的工作,以避免浪费时间帮助我。然后,当我听不懂某些内容时,我会犹豫是否要问他,并试图确定是否会浪费时间。 我是那种慢慢地整理东西的人,但是对细节非常关注。我认为前者使我显得无能。 有人到达我的家乡,请说些有用的信息。...我害怕在几个月内失去工作或其他原因...

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.