Questions tagged «c#»

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

5
C#中泛型的良好命名约定是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我决定在这里问这个问题,而不是在堆栈溢出时问这个问题,因为它相当主观。 在C#中,通常我会看到名称很差的泛型类型。具体来说,“ T”是常用的,但其本身并不是有意义的名称。例如: class Fruit<T> { T fruit; } 虽然这是典型的方法,但有人会反对吗?如果是这样,那么在C#泛型函数和类的上下文中,泛型的合理命名约定是什么? 在我之前的示例中,让我们假设泛型类型T必须始终是水果的类型,例如Apple或Orange。该类型T需要使它很明显地表明它是水果的类型,所以也许更好的名称是FruitType,所以我们最终得到: class Fruit<FruitType> { FruitType fruit; } 这只是为了给大家我正在寻找的想法。这个问题可以接受的“经验法则”是什么?
16 c#  naming  generics 


2
每个.NET人员应该知道哪些主要实践和设计模式?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4年前关闭。 在作为专业程序员的短暂时间内,我看到了许多由程序员编写的应用程序,他们的整个学历似乎都在阅读.NET 2.0书中的前几章。 当我开始的时候,我写了大部分的应用程序! 对编写AWESOME .NET应用程序至关重要的最大设计模式是什么? 太棒了,我的意思是在里面!

8
LINQ高级面试问题[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 5年前关闭。 我正在为高级程序员准备面试问题中的LINQ部分。LINQ中最有趣的问题包括哪些?又为什么呢?
16 c#  .net  interview  linq 

10
C#代表在现实世界中的使用
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我认为我在概念上理解C#代表,但是,我一直在努力寻找一个有用的现实示例。您能否提供一些答案,详细说明在实际应用程序中如何使用C#委托以及它们使您能够解决哪些问题。
16 c#  delegates 

6
从过程代码转换为面向对象的代码
我一直在阅读“有效地使用遗留代码和清除代码”,其目的是学习有关如何开始清除大型ASP.NET Webforms应用程序的现有代码库的策略。 该系统自2005年起问世,此后进行了许多增强。最初,代码的结构如下(并且仍然在很大程度上以这种方式进行结构化): ASP.NET(aspx / ascx) 代码隐藏(C#) 业务逻辑层(c#) 数据访问层(c#) 数据库(Oracle) 主要问题是该代码伪装成面向对象的程序。它实际上违反了两本书中描述的所有准则。 这是业务逻辑层中典型类的示例: public class AddressBO { public TransferObject GetAddress(string addressID) { if (StringUtils.IsNull(addressID)) { throw new ValidationException("Address ID must be entered"); } AddressDAO addressDAO = new AddressDAO(); return addressDAO.GetAddress(addressID); } public TransferObject Insert(TransferObject addressDetails) { if (StringUtils.IsNull(addressDetails.GetString("EVENT_ID")) || StringUtils.IsNull(addressDetails.GetString("LOCALITY")) || …

4
基于TimeZone存储DateTime的最佳实践
开发一个Web应用程序,该应用程序应允许用户根据其TimeZone安排约会。我将用户计划的日期时间作为服务器日期时间存储到数据库字段中。在显示计划信息时,将从数据库中检索值并转换为用户timzone。在代码库中进行处理我正在根据用户时区转换DateTime。请建议这是最佳做法还是存在任何简便方法?

6
了解static关键字
我有一些使用Java,Javascript和PHP开发的经验。 我正在阅读Microsoft Visual C#2010分步教程,我认为这是一本关于向您介绍C#语言的很好的书。 我在理解static关键字时似乎遇到了问题。据我了解,如果将一个类声明为静态,则所有方法和变量都必须为静态。main方法始终是静态方法,因此在类中,main方法存在所有变量,并且如果必须在main方法中调用它们,则将这些方法声明为静态。我还注意到,为了从另一个类调用静态方法,您不需要创建可以使用类名的对象。 但是static关键字的实际目的是什么?什么时候应该声明静态变量和方法?

5
将对象两次传递给相同的方法还是与合并的接口合并?
我有一种方法,可以在与数字板交谈后创建数据文件: CreateDataFile(IFileAccess boardFileAccess, IMeasurer boardMeasurer) 这里boardFileAccess和boardMeasurer是相同的实例Board对象,同时实现了IFileAccess和IMeasurer。IMeasurer在这种情况下,仅用于一种方法,该方法将使板上的一个引脚处于活动状态以进行简单的测量。然后,使用将该测量的数据本地存储在板上IFileAccess。Board位于一个单独的项目中。 我得出的结论CreateDataFile是,通过快速测量然后存储数据来做一件事,对于其他使用此代码然后必须进行测量并写入文件的人来说,使用同一方法进行这两种操作更直观作为单独的方法调用。 对我来说,将同一对象两次传递给方法似乎很尴尬。我认为做一个本地接口IDataFileCreator,可以扩展IFileAccess和IMeasurer再有一个包含一个实现Board的实例,将只需要调用所需的Board方法。考虑到同一板对象将始终用于测量和文件写入,将同一对象两次传递给方法是否是一种不好的做法?如果是这样,使用本地接口和实现是否是合适的解决方案?

4
size_t或int用于尺寸,索引等
在C ++中,size_t(或更正确地说T::size_type,通常是“ 类型” size_t;即unsigned类型)被用作的返回值size(),的自变量operator[]等(请参见std::vector等)。 另一方面,.NET语言出于相同目的使用int(并且(可选long))。实际上,不需要 CLS兼容语言来支持unsigned类型。 由于.NET是比C ++新的东西告诉我,可能会有问题,使用unsigned int连供的事情,“不可能”像数组索引或长度为负。C ++的方法是否“向后兼容”?还是这两种方法之间存在真实而重大的设计折衷? 为什么这么重要?好吧……对于C ++中的新多维类,我应该使用什么?size_t还是int? struct Foo final // e.g., image, matrix, etc. { typedef int32_t /* or int64_t*/ dimension_type; // *OR* always "size_t" ? typedef size_t size_type; // c.f., std::vector<> dimension_type bar_; // maybe rows, or x dimension_type baz_; // e.g., columns, …
15 c#  c++  array 

3
ref和out在运行时之间有什么区别?
C#提供ref和out关键字,以使参数通过引用传递。两者的语义非常相似。唯一的区别在于标记变量的初始化: ref要求在将变量传递给函数之前进行初始化,out而不是。 out要求变量在函数内部初始化,ref不需要。 这两个关键字的用例也几乎相同,它们的使用频率太高了,我相信这是代码的味道(尽管有诸如TryParse和TryGetValue模式之类的有效用例)。 因此,有人可以解释一下,为什么C#中有两个非常相似的工具用于如此狭窄的用例? 另外,在MSDN上,它们具有不同的运行时行为: 尽管ref和out关键字导致不同的运行时行为,但在编译时它们不被视为方法签名的一部分。 它们的运行时行为有何不同? 结论 这两个答案看起来都是正确的,谢谢你们。我接受jmoreno是因为它更明确。

2
对于域驱动的设计RESTful Web服务,这是否是一个好的Visual Studio解决方案结构?
我正在构建.NET 4.5 C#Web API RESTful解决方案,我想告诉我我的项目解决方案对于使用域驱动设计设计的解决方案是否正确和/或明智(足够?)。 该解决方案已分为6个项目: /基础 (没有任何引用) 该Web项目构成了解决方案与外界之间的接口。包含Web API控制器。除了从请求对象中收集值并要求BizApi层工作以外,几乎没有任何逻辑。 /Biz.Api (由基础引用) 提供域服务,并允许/ Base接口项目访问/Biz.Domain项目中的域业务逻辑对象。 /Biz.Domain (由Biz.Api引用) 提供Biz.Api层的域类。这些提供了操作内存中业务数据的方法。 /Dal.Db (由Biz.Api引用) 数据库存储库层。访问数据库并将返回的数据映射到/ Interfaces层中定义的内部DTO。 /Dal.Services (由Biz.Api引用) 为外部依赖项(如Web服务)提供代理层,并将其返回的数据映射到/ Interfaces项目中定义的内部DTO。 /接口 (以上大多数项目引用) 包含用于在解决方案中传递数据的DTO类和用于为IoC之类的合同定义合同的C#接口。

3
我得到依赖注入,但是有人可以帮助我了解对IoC容器的需求吗?
如果这似乎又是一个重复的问题,我深表歉意,但是每次我找到有关该主题的文章时,它大多只是在谈论DI是什么。因此,我得到了DI,但我试图了解每个人似乎都在使用的IoC容器的需求。IoC容器的目的真的只是为了“自动解决”依赖项的具体实现吗?也许我的类往往没有几个依赖关系,也许这就是为什么我认为没什么大不了的,但是我想确保我正确地理解了容器的效用。 我通常将我的业务逻辑分解为一个可能看起来像这样的类: public class SomeBusinessOperation { private readonly IDataRepository _repository; public SomeBusinessOperation(IDataRespository repository = null) { _repository = repository ?? new ConcreteRepository(); } public SomeType Run(SomeRequestType request) { // do work... var results = _repository.GetThings(request); return results; } } 因此,它仅具有一个依赖性,在某些情况下可能具有第二或第三依赖性,但并非经常如此。因此,任何调用此方法的都可以传递其自己的存储库,也可以允许其使用默认存储库。 就我对IoC容器的当前了解而言,该容器所做的只是解析IDataRepository。但是,如果这就是全部,那么我就没有看到太多的价值,因为当没有依赖项传入时,我的操作类已经定义了一个回退。所以我唯一想到的另一个好处是,如果我有多个操作,例如这个使用相同的后备仓库,我可以在注册表/工厂/容器的一个地方更改该仓库。那太好了,是吗?

5
我可以在不破坏封装的情况下使用依赖注入吗?
这是我的解决方案和项目: 书店 (解决方案) BookStore.Coupler (项目) Bootstrapper.cs BookStore.Domain (项目) CreateBookCommandValidator.cs CompositeValidator.cs IValidate.cs IValidator.cs ICommandHandler.cs BookStore.Infrastructure (项目) CreateBookCommandHandler.cs ValidationCommandHandlerDecorator.cs BookStore.Web (项目) Global.asax BookStore.BatchProcesses (项目) Program.cs Bootstrapper.cs: public static class Bootstrapper.cs { // I'm using SimpleInjector as my DI Container public static void Initialize(Container container) { container.RegisterManyForOpenGeneric(typeof(ICommandHandler<>), typeof(CreateBookCommandHandler).Assembly); container.RegisterDecorator(typeof(ICommandHandler<>), typeof(ValidationCommandHandlerDecorator<>)); container.RegisterManyForOpenGeneric(typeof(IValidate<>), AccessibilityOption.PublicTypesOnly, (serviceType, …

2
我应该使用工厂方法而不是构造函数。我可以更改它并且仍然向后兼容吗?
问题 假设我有一个名为的类DataSource,它提供了ReadData一种从.mdb文件中读取数据的方法(也许还有其他方法,但为了简单起见): var source = new DataSource("myFile.mdb"); var data = source.ReadData(); 几年后,我决定.xml除了.mdb文件作为数据源之外,还希望能够支持文件。.xml和.mdb文件的“读取数据”实现完全不同。因此,如果我要从头开始设计系统,则可以这样定义: abstract class DataSource { abstract Data ReadData(); static DataSource OpenDataSource(string fileName) { // return MdbDataSource or XmlDataSource, as appropriate } } class MdbDataSource : DataSource { override Data ReadData() { /* implementation 1 */ } } class XmlDataSource …

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.