Questions tagged «c#»

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

1
Microsoft为什么在Windows Store应用程序中放弃了RESW的RESX模型?
Microsoft为什么选择从.NET的RESX文件中更改资源管理系统? RESX具有有用的代码生成功能,可为开发人员提供自动完成的资源名称填写以及输出恕我直言的易读代码。 据我所知,新的RESW格式是相同的裸XML文件,但是没有任何代码生成,从而迫使开发人员编写更多代码,并使它们无法进行编译时错误检测。
18 c#  .net  winrt 

4
持久性如何适合纯功能性语言?
使用命令处理程序处理持久性的模式如何适合于一种纯函数式语言,在这种语言中,我们希望使与IO相关的代码尽可能的薄? 当以面向对象的语言实现域驱动设计时,通常使用命令/处理程序模式执行状态更改。在这种设计中,命令处理程序位于您的域对象之上,并负责无聊的与持久性相关的逻辑,例如使用存储库和发布域事件。处理程序是您域模型的公开面孔;诸如UI之类的应用程序代码在需要更改域对象的状态时会调用处理程序。 C#中的草图: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } } 该document域对象是负责执行业务规则(如“用户应该有权丢弃文档”或“你不能放弃一个已经被丢弃的文件”),并产生我们需要发布域事件(document.NewEvents会是一个IEnumerable<Event>,并且可能包含一个DocumentDiscarded事件)。 这是一个不错的设计-易于扩展(您可以通过添加新的命令处理程序来添加新用例,而无需更改域模型),并且不知道对象的持久化方式(可以轻松地将NHibernate存储库换成Mongo存储库,或将RabbitMQ发布者替换为EventStore发布者),这使得使用伪造品和模拟进行测试变得容易。它还遵循模型/视图分离-命令处理程序不知道批处理作业,GUI或REST API是否正在使用它。 在Haskell这样的纯功能语言中,您可以大致像这样对命令处理程序进行建模: newtype CommandHandler = CommandHandler {handleCommand :: …

3
构造函数应该有多复杂
我正在与我的同事讨论一个构造函数可以完成多少工作。我有一个类B,它内部需要另一个对象A。对象A是类B需要完成其工作的几个成员之一。它的所有公共方法都依赖于内部对象A。有关对象A的信息存储在DB中,因此我尝试通过在构造函数中的DB上进行查找来进行验证和获取。我的同事指出,除了捕获构造函数参数外,构造函数不应做太多工作。由于如果使用构造函数的输入未找到对象A,所有公共方法都将失败,因此我认为与其允许创建实例并在以后失败,不如让它早于构造器。 别人怎么想?如果这有任何区别,我正在使用C#。 阅读是否有理由在构造函数中完成对象的所有工作?我想知道通过转到DB来获取对象A是“使该对象准备好使用所需的任何其他初始化”的一部分,因为如果用户将错误的值传递给构造函数,我将无法使用其任何公共方法。 构造函数应实例化对象的字段,并进行其他任何必要的初始化,以使对象可以立即使用。这通常意味着构造函数很小,但是在某些情况下这将需要大量的工作。
18 c#  constructors 

13
Windows Services的实际用途是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 4年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我是使用Windows Services的新手。尽管我已经学会了在VS2010中创建Windows服务,但是我想知道一些使用Windows服务的实用方法? 我在考虑当前上下文的情况下尝试了谷歌搜索,只是找到了有关如何创建Windows服务的更多教程。 编辑赏金优惠: 所有的答案都很好,但我一直在寻找Windows服务及其含义的更多实际示例?这将帮助开发人员知道何时将其与案例研究一起使用是合适的。

1
C#类命名标准/准则
多年来,我在应用程序中为服务使用了各种命名约定 例如: [ClassName]服务 [ClassName]管理员 [ClassName]工厂 [ClassName] Provider [ClassName]助手 我通常只对没有外部依赖项的实用程序类使用“ Helper”后缀。 但是,我发现彼此之间存在一些交叉,并想知道是否有关于使用什么以及何时使用的任何建议/标准/准则。
18 c#  naming 

13
假设不需要向后兼容,C#或.Net功能会中断吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 任何产品或框架都会发展。主要是为了满足用户需求,利用新的计算能力并使其变得更好而做的。有时,主要设计目标也会随产品而改变。C#或.net框架也不例外。我们看到,今天的第四版与第一版相比有很大不同。但是事情成为阻碍这种向后兼容的障碍。 在大多数框架/产品中,如果不需要支持向后兼容性,则某些功能将被切断。据您介绍,C#/。net中的这些功能是什么? 请为每个答案提及一项功能。

20
VB.Net与C#辩论[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我去过的工作场所在项目开始时就提出了“我们应该使用VB.Net还是C#”的问题。 诚然,与.Net早期相比,现在做出决定的可能性可能不大。特别是考虑到语言融合的趋势,但这仍然是一场激烈的辩论。 那么,在VB.Net和C#之间,您首选哪种语言,为什么呢?
18 c#  .net  vb.net 

5
当客户要求在其网站上进行RTF编辑时,您会怎么做?
众所周知,XSS攻击很危险,而且很容易发动。像ASP.NET MVC一样,各种框架使对HTML进行编码变得容易: <%= Html.Encode("string"); %> 但是,当您的客户要求他们能够直接从Microsoft Word文档上载其内容时,会发生什么情况? 这是场景:人们可以将Microsoft Word中的内容复制并粘贴到WYSIWYG编辑器(在本例中为tinyMCE)中,然后将该信息发布到网页上。 该网站是公开的,但是只有该组织的成员才能访问该网页上的信息。 如何以安全的方式处理这些要求?目前,还没有检查客户发布的内容(因为只有“受信任的”用户可以发布),但是我对此并不特别满意,如果帐户被黑客入侵,我想将其进一步锁定。 我知道,满足这些要求的唯一概念性方法是将HTML标签列入白名单,并让它们通过。还有另一种方法吗?如果不是,有什么安全的方法可以让用户以任何形式将输入存储在数据库中,而只显示正确编码并清除不良标签的输入? 相关问题 防止跨站点脚本(XSS)
18 c#  .net  asp.net-mvc 

2
如何在Winform应用程序中将视图与逻辑分开?
我知道有像MVC这样的模式可以将视图与逻辑分开,但是,我不知道它们在Winform应用程序中有多常见。 对于C#Winform应用程序,我可以从开始Form并逐步向其中添加UI组件,然后针对组件的事件(click,textchanged...),我调用函数,或直接在其中编写逻辑! 我知道这是一个坏习惯,但是我不知道在Visual Studio中启动此类项目的最佳方法是什么(模板,框架,起点),MVC是唯一的解决方案吗?我应该为任何项目这样做吗? 我希望获得一些入门指南或轻量级框架。
18 c#  mvc  winforms 

6
作者将接口引用强制转换为任何实现是什么意思?
我目前在试图掌握C#的过程,所以我读通过C#自适应编码由加里·麦克莱恩大厅。 他撰写有关模式和反模式的文章。在实现与接口部分中,他写道: 不熟悉接口编程概念的开发人员通常很难放开接口背后的内容。 在编译时,接口的任何客户端都不应该知道接口正在使用哪种接口实现。这些知识可能导致错误的假设,从而使客户端耦合到接口的特定实现。 想象一下一个常见的示例,其中一个类需要在持久性存储中保存一条记录。为此,它正确地委托给一个接口,该接口隐藏了所使用的持久性存储机制的详细信息。但是,对运行时使用接口的哪个实现进行任何假设都是不正确的。例如,将接口引用强制转换为任何实现都是一个坏主意。 这可能是语言障碍,或者是我缺乏经验,但是我不太明白这意味着什么。这是我的理解: 我有一个免费的有趣的项目来练习C#。我在那里上课: public class SomeClass... 此类在很多地方都使用过。在学习C#时,我读到最好使用接口抽象,因此我做了以下工作 public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have. public class SomeClass : ISomeClass <- Same as before. All implementation here. 因此,我进入了所有一些类引用,并用ISomeClass替换了它们。 除了在构造中,我写过: ISomeClass myClass = new SomeClass(); …

3
并行调用多个异步服务
我很少有彼此不依赖的异步REST服务。那就是在“等待” Service1的响应时,我可以调用Service2,Service3等。 例如,参考下面的代码: var service1Response = await HttpService1Async(); var service2Response = await HttpService2Async(); // Use service1Response and service2Response 现在,它们service2Response不再依赖service1Response并且可以独立获取。因此,不需要我等待第一服务的响应来呼叫第二服务。 我不认为我可以Parallel.ForEach在这里使用,因为它不是CPU限制的操作。 为了并行调用这两个操作,可以调用use Task.WhenAll吗?我看到的一个问题Task.WhenAll是它不会返回结果。要获取结果,我可以在致电task.Result后调用Task.WhenAll,因为所有任务都已经完成并且我需要获取我们所有的响应? 样例代码: var task1 = HttpService1Async(); var task2 = HttpService2Async(); await Task.WhenAll(task1, task2) var result1 = task1.Result; var result2 = task2.Result; // Use result1 and result2 就性能而言,此代码是否比第一个更好?我可以使用其他方法吗?

4
如何存储只读数据以与应用程序一起部署?
我正在开发一个桌面应用程序,此应用程序需要运行一些信息,但不会更改任何这些信息(必须在应用程序的每次执行中加载数据,但永远不要更改数据)。数据必须与应用程序运行时存储在同一台计算机上(客户端存储吗?)。 如果用户不能轻易更改此信息(假设他们没有太多的IT知识),那也更好。 我应该如何存储这种信息?本地数据库?与应用程序一起发送的XML? 我正在使用WPF。
17 c#  design  data  wpf 

7
为什么按原样创建实例?
在过去六个月的时间里,我已经学习了C#,现在正在研究Java。我的问题是关于实例创建(实际上是用两种语言)的问题,而更多的是:我想知道为什么他们这样做了。举个例子 Person Bob = new Person(); 是否有理由两次指定对象?会不会有something_else Bob = new Person()? 如果我遵循惯例,似乎会更像: int XIsAnInt; Person BobIsAPerson; 也许是其中之一: Person() Bob; new Person Bob; new Person() Bob; Bob = new Person(); 我想我很好奇是否有比“这就是完成的方式”更好的答案。

5
用代码存储数据
我过去几次想将数据存储在代码中。这将是很少更改的数据,并用于不可能,不实际或不希望访问数据库的地方。一个小例子是存储国家列表。为此,您可以执行以下操作: public class Country { public string Code { get; set; } public string EnglishName {get;set;} } public static class CountryHelper { public static List<Country> Countries = new List<Country> { new Country {Code = "AU", EnglishName = "Australia"}, ... new Country {Code = "SE", EnglishName = "Sweden"}, ... }; public …
17 c# 

9
用于访问计量单位的数据结构
TL; DR-我正在尝试设计一种最佳的数据结构,以定义度量单位内的单位。 A Unit of measure本质上是value与关联的(或数量)unit。 SI单位有七个基准或尺寸。即:长度,质量,时间,电流,温度,物质量(摩尔)和发光强度。 这足够简单,但是我们经常使用许多派生单位和费率。示例组合单位为牛顿:kg * m / s^2示例比率为tons / hr。 我们的应用程序严重依赖隐含单位。我们将把单元嵌入变量或列名中。但这在我们需要指定具有不同单位的度量单位时会产生问题。是的,我们可以在输入和显示时转换值,但这会生成很多开销代码,我们希望将其封装在自己的类中。 在Codeplex和其他协作环境上有许多解决方案。项目的许可是可以接受的,但是项目本身通常最终会变得太轻或太重。我们正在追逐自己的“正当”独角兽。 理想情况下,我可以使用以下方法定义新的度量单位: UOM myUom1 =新的UOM(10伏); UOM myUom2 =新的UOM(43.2,牛顿); 当然,我们会根据客户的需求混合使用英制和SI单位。 我们还需要使这种单位结构与将来的数据库表保持同步,以便我们也可以在数据中提供相同程度的一致性。 定义创建计量单位类别所需的单位,派生单位和费率的最佳方法是什么?我可以看到使用了一个或多个枚举,但这对于其他开发人员可能会感到沮丧。一个单一的枚举包含200多个条目,将是巨大的,而基于SI与英制单位的多个枚举可能会造成混淆,而基于单位本身的分类的其他细分可能会造成混淆。 枚举示例显示了我的一些担忧: myUnits.Volt myUnits.Newton myUnits.meter SIUnit.meter ImpUnit.foot DrvdUnit.Newton DrvdUnitSI.Newton DrvdUnitImp.FtLbs 我们正在使用的单位集非常明确,而且空间有限。当我们有客户需求时,我们确实需要能够扩展和添加新的派生单位或费率。尽管我认为更广泛的设计方面适用于多种语言,但是该项目使用C#。 我看过的一个库允许通过字符串自由输入单位。然后,他们的UOM类解析该字符串,并相应地添加内容。这种方法的挑战在于,它迫使开发人员思考并记住正确的字符串格式是什么。如果我们不在代码内添加其他检查以验证在构造函数中传递的字符串,则会冒运行时错误/异常的风险。 实质上,另一个库创建了太多开发人员必须使用的类。随着等效值单位它提供了一个DerivedUnit和RateUnit等。本质上,对于我们要解决的问题,代码过于复杂。该库实际上允许任何组合(在单位世界中是合法的),但是我们很高兴通过不允许所有可能的组合来扩大问题范围(简化代码)。 其他库非常简单,甚至都没有考虑过运算符重载。 另外,我也不担心尝试进行错误的转换(例如:伏特到米)。开发人员是目前唯一可以在此级别访问的人员,我们不一定需要防止这些类型的错误。

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.