Questions tagged «.net»

.NET Framework是用于Microsoft Windows操作系统的软件框架。它包括基类库,公共语言运行时和动态语言运行时的实现。它支持许多编程语言,包括C#,VB.NET,F#和C ++。

10
Mono通常被用来表示“是的,.NET是跨平台的”。该要求的有效性如何?[关闭]
在此时,您将为.NET和Java之间的项目选择什么?我说我会考虑“您将始终部署到Windows吗?” 在新的Web项目中占据先机的最重要的技术决定,如果答案为“否”,我建议使用Java而不是.NET。 一个非常普遍的反论点是“如果我们要在Linux / OS X /任何平台上运行,我们将只运行Mono” 1,这是表面上一个非常引人注目的论点,但我不同意原因。 OpenJDK和所有供应商提供的JVM已通过官方的Sun TCK,以确保一切正常。我不知道Mono通过Microsoft TCK。 Mono落后于.NET版本。当前完全支持什么.NET级别? 所有GUI元素(WinForms?)在Mono中都能正常工作吗? 企业可能不希望将开源框架作为官方计划B。 我知道随着Oracle对Java的新管理,未来并不安全,但是例如IBM为许多平台(包括Linux)提供了JDK。他们只是不是开源的。 那么,在哪种情况下Mono是.NET应用程序的有效业务策略? 1 Mark H总结为:“如果声称“我有一个用.NET编写的Windows应用程序,则应在mono上运行”,则不是,这不是有效的声明-但Mono已努力进行此类应用程序的移植更简单。”
168 java  .net  mono 

6
SOLID原则和代码结构
在最近的一次工作面试中,除了提供各种原理的基本含义之外,我无法回答有关SOLID的问题。这真的让我很烦。我做了几天值得深入研究的工作,但还没有得出令人满意的总结。 面试问题是: 如果您要看一个我严格遵循SOLID原则的.Net项目,那么您期望在项目和代码结构方面看到什么? 我挣扎了一下,没有真正回答问题,然后轰炸了。 我如何更好地处理这个问题?
149 c#  .net  solid 

8
您如何组织项目?[关闭]
您是否有任何特殊的组织项目风格? 例如,目前我正在为玻利维亚的几所学校创建一个项目,这是我的组织方式: TutoMentor (Solution) TutoMentor.UI (Winforms project) TutoMentor.Data (Class library project) 您如何精确地组织项目?您是否有自己组织并为之自豪的事例?您可以共享“解决方案”窗格的屏幕截图吗? 在我的应用程序的UI区域中,我无法确定一个好的架构来组织不同的表单及其所属位置。 编辑: 如何在.UI项目中组织不同的形式?我应该在哪里/如何分组其他形式?将它们全部置于项目的根目录是一个坏主意。

7
C#、. NET,ASP,ASP.NET等之间的关系
我真的不清楚C#,C#.NET与ASP和其他“ .NET”语言的区别。 据我了解,.NET是...事物的库/框架。我认为他们本质上是在访问Windows数据,例如表单元素等,但这似乎不适用于ASP.NET。 另外,我看到人们称自己为“ .NET”开发人员。这是否意味着他们精通C#,ASP和其他语言? 最后,我从来没有看到没有附加.NET的C#。C#是否与.NET紧密地联系在一起,否则无法使用? 总结:.NET到底提供了什么?它与C#和ASP等有什么关系?“ .NET开发人员”是什么意思?最后,为什么没有.NET就永远看不到C#? [顺便说一句,我意识到这些是多个问题,但是我认为它们之间是非常相关的(或者至少是浏览Programmers / SO等给我的印象))。
143 c#  .net  asp.net 

8
在软件行业中典型的不良编程习惯是吗?[关闭]
一个月前,我刚开始担任软件开发人员的第一份工作。我所学到的有关OOP,SOLID,DRY,YAGNI,设计模式,SRP等的所有信息都可以丢到窗外。 他们使用C#.NET Webforms并使用很少的外部类(绝对不称为对象)来执行“代码隐藏”中的几乎所有操作。他们确实使用自定义控件并重复使用它们。关于唯一使用的对象是Entity Framework。他们为每个客户端重用代码隐藏。他们有400行长的方法来处理所有类型的工作。对于新客户端,他们采用aspx和aspx.cs并剥离客户端代码,然后开始添加新的特定于客户端的代码。 他们的第一个借口是增加额外的维护,更多的代码就是更多的维护。这是一家包括我在内的三个开发商的小商店。一个开发人员拥有30多年的经验,而另一个则拥有20多年的经验。一个曾经是游戏开发人员,另一个曾经一直使用C和C ++工作。 这在软件行业中有多普遍?我如何确保自己掌握OOP和相关原则?我在业余时间进行练习,我觉得我真的需要在一个经验丰富的开发人员下工作,以更好地使用OOP。

12
.NET中有效的本地化策略[关闭]
我正在为.NET MVC应用程序开发UI,在不久的将来它将要求所有内容的国际本地化。我对.NET总体上非常熟悉,但是从来没有一个项目需要如此高度地关注国际可访问性。 该项目最初是用英语完成的。在这一点上,我应该采取什么措施来简化将来的本地化工作?

8
返回魔术值,引发异常或在失败时返回false?
有时我最终不得不为类库编写方法或属性,对于该类库,没有真正的答案不是偶然,而是失败。无法确定,无法使用,无法找到,当前无法执行或没有其他可用数据。 我认为对于这种相对非异常的情况,有三种可能的解决方案可以指示C#4失败: 返回一个没有其他含义的魔术值(例如null和-1); 抛出异常(例如KeyNotFoundException); return false并在out参数中提供实际的返回值(例如Dictionary<,>.TryGetValue)。 所以问题是:我应该在哪种非例外情况下抛出异常?而且,如果我不应该抛出:什么时候返回在实现Try*带有out参数的方法时产生的魔术值?(对我来说,该out参数似乎很脏,要正确使用该参数还需要更多工作。) 我正在寻找实际的答案,例如涉及设计准则的答案(我对Try*方法一无所知),可用性(因为我向类库提出的要求),与BCL的一致性以及可读性。 在.NET Framework基类库中,使用了所有三种方法: 返回一个没有其他含义的魔术值: Collection<T>.IndexOf 返回-1, StreamReader.Read 返回-1, Math.Sqrt 返回NaN, Hashtable.Item 返回null; 抛出异常: Dictionary<,>.Item 抛出KeyNotFoundException, Double.Parse抛出FormatException; 要么 return false并在out参数中提供实际的返回值: Dictionary<,>.TryGetValue, Double.TryParse。 请注意,正如HashtableC#中没有泛型时创建的那样,它使用object,因此可以null作为魔术值返回。但是对于泛型,在中使用了例外Dictionary<,>,而最初没有TryGetValue。见解显然在改变。 显然,Item- TryGetValue和Parse- TryParse偶是有原因的,所以我认为抛出异常的非特殊的故障是在C#4 没有这样做。但是,Try*即使存在,方法也不总是存在Dictionary<,>.Item。

6
什么时候去流利的C#?
在很多方面,我真的很喜欢Fluent接口的概念,但是使用C#的所有现代功能(初始化程序,lambda和命名参数),我发现自己在思考:“值得吗?”,“这是正确的模式吗?采用?”。任何人都可以给我(如果不是被接受的做法),至少是他们自己的经验或决策矩阵,以便何时使用Fluent模式? 结论: 到目前为止的答案有一些好的经验法则: 当操作员多于设置员时,流利的接口将提供极大帮助,因为调用从上下文传递中受益更多。 流利的接口应该被认为是api之上的一层,而不是唯一的使用方法。 lambda,初始值设定项和命名参数等现代功能可以配合使用,使流畅的界面更加友好。 这是一个使我觉得不需要的现代功能的示例。以一个(也许很差的例子)Fluent接口为例,该接口允许我创建一个Employee,例如: Employees.CreateNew().WithFirstName("Peter") .WithLastName("Gibbons") .WithManager() .WithFirstName("Bill") .WithLastName("Lumbergh") .WithTitle("Manager") .WithDepartment("Y2K"); 可以很容易地用初始化器编写,例如: Employees.Add(new Employee() { FirstName = "Peter", LastName = "Gibbons", Manager = new Employee() { FirstName = "Bill", LastName = "Lumbergh", Title = "Manager", Department = "Y2K" } }); 在本示例中,我还可以在构造函数中使用命名参数。
78 c#  .net 

13
我老板的坏案是“这里没有发明”
我的部门专门致力于将客户数据转换为我们的数据库架构,以便他们可以使用我们的软件。 现在,我们有一些C#应用程序IDataReader(占99%的时间SqlDataReader),执行一些清理和映射,将其插入到DataRow对象中,然后使用将SqlBulkCopy其插入到我们的数据库中。 有时(尤其是当源数据库包含图像作为varbinary对象时),此过程实际上可能陷入从服务器到应用程序的SQL传输,然后又转过来再返回到服务器。 我觉得,如果我们将某些转换重写为SSIS软件包,则可以大大加快转换速度。但是,我遇到的最大障碍是当我的老板以“在这里没有发明”的方式退缩并说:“如果Microsoft放弃对SSIS的支持,那该怎么办?我们将拥有所有这些过时的代码,并且将被搞砸。” 这不是我第一次点击“如果他们删除了该功能...?” 我老板的回答。我没有时间以旧的方式编写转换,自我学习SSIS,也没有以新的方式编写它来演示/测试收益(我们都没有人使用过SSIS,所以会有一段时间必须学习如何使用它)。 在这种情况下我该怎么办?停止推广新技术?等到他离开部门后(我是继他之后部门中第二高的人,但是离职/退休可能还需要几年时间)?寻找一种新方法让他停止害怕第三方工具?

11
为什么使用抽象(例如LINQ)如此禁忌?[关闭]
我是一个独立承包商,因此,我每年要面试3-4次新演出。我现在正处于那个周期之中,尽管我觉得面试进行得很顺利,但还是被拒绝了。今年我发生了两次相同的事情。 现在,我不是一个完美的人,而且我不希望每个组织都适合。就是说,我的平均命中率比平时低,所以我礼貌地向我的最后一个面试官询问一些建设性的反馈意见,他答应了! 根据访问者的说法,最主要的是,我似乎过于倾向于使用抽象(例如LINQ),而不是倾向于较低级别的有机增长算法。 从表面上看,这是有道理的-实际上,这也使其他拒绝也有意义,因为我在那些访谈中也对LINQ感到不满,而且访调员似乎对LINQ并不了解很多(即使他们是.NET)。伙计们)。 因此,现在我要提一个问题:如果我们应该“站在巨人的肩膀上”并使用我们可以使用的抽象(如LINQ),那么为什么有些人认为它是忌讳的呢?如果代码无需花费额外成本即可达到相同的目标,那么将代码“下架”是否有意义? 在我看来,LINQ,即使它是一种抽象,也只是对为实现完全相同的目的而编写的所有相同算法的抽象。只有性能测试可以告诉您您的自定义方法是否更好,但是如果LINQ之类的东西满足要求,为什么首先要编写自己的类呢? 我的意思不是在这里专注于LINQ。我敢肯定,JAVA世界具有可比性,我只是想知道为什么有些人对使用他们自己未编写的抽象的想法感到如此不舒服。 更新 正如Euphoric指出的那样,在Java世界中,没有任何东西可以与LINQ相提并论。 因此,如果您是在.NET堆栈上进行开发,为什么不总是尝试使用它呢?人们是否可能不完全了解它的作用?

17
为什么使用OO方法而不是巨大的“ switch”语句?
我在.Net,C#商店工作,并且我有一位同事一直坚持认为,我们应该在代码中使用带有大量“案例”而不是更多面向对象方法的巨型Switch语句。他的论断始终可以回溯到以下事实:Switch语句会编译为“ cpu跳转表”,因此是最快的选择(即使在其他情况下,我们的团队被告知我们不在乎速度)。 老实说,我对此没有争议……因为我不知道他在说什么。 是吗 他只是在说他的屁股吗? 只是想在这里学习。

6
何时在.Net中使用弱引用?
我个人没有遇到过需要在.Net中使用WeakReference类型的情况,但是普遍的看法似乎是应该在缓存中使用它。乔恩·哈罗普博士给了反对缓存使用在WeakReferences在他的一个很好的案例回答到这个问题。 我也经常听到AS3开发人员谈论使用弱引用来节省内存占用,但是根据我的交谈,似乎增加了复杂性,而不一定实现预期的目标,并且运行时行为是不可预测的。如此之多,以至于许多人只是放弃了,而是更加谨慎地管理内存使用/优化其代码以减少内存占用(或权衡更多的CPU周期和较小的内存占用)。 乔恩·哈罗普(Jon Harrop)博士在回答中也指出.NET弱引用不是软的,并且在gen0上有激进的弱引用集合。根据MSDN,较长的弱引用使您有可能重新创建对象but the state of the object remains unpredictable.! 考虑到这些特征,我想不出弱引用有用的情况,也许有人可以启发我?

6
如何应对依赖依赖的恐惧
我所在的团队创建了可供公司合作伙伴用来与我们的平台集成的组件。 因此,我同意在引入(第三方)依赖项时应格外小心。当前,我们没有第三方依赖项,我们必须保持框架的最低API级别。 一些例子: 我们被迫停留在框架的最低API级别(.NET标准)上。其背后的原因是,有一天可能会出现一个仅支持非常低的API级别的新平台。 我们已经实现了自己的用于(反)序列化JSON的组件,并且正在对JWT进行同样的处理。在更高级别的框架API上可用。 我们已经围绕标准库的HTTP框架实现了包装器,因为我们不想依赖于标准库的HTTP实现。 同样,出于同样的原因,所有用于映射到XML或从XML映射的代码都是“手工”编写的。 我觉得我们走得太远了。我想知道如何处理这个问题,因为这会极大影响我们的速度。


3
.NET中记录和跟踪的最佳实践
我已经阅读了很多有关跟踪和日志记录的内容,试图为该问题的最佳实践找到一些黄金法则,但是没有任何东西。人们说好的程序员会产生良好的跟踪,但是要这样说,它必须来自经验。 我也在这里和通过互联网阅读了类似的问题,它们并不是我要问的一样,或者我的回答不令人满意,也许是因为这些问题缺乏细节。 因此,人们说,在无法附加调试器的情况下,跟踪应可以复制调试应用程序的经验。它应该提供足够的上下文,以便您可以看到应用程序中每个控制点采用的路径。 更深入地讲,您甚至可以区分跟踪和事件日志记录,因为“事件日志记录与跟踪的不同之处在于它捕获主要状态而不是详细的控制流”。 现在,说我想仅使用标准.NET类(System.Diagnostics名称空间中的类)进行跟踪和记录。我认为TraceSource类比静态Trace类更适合这项工作,因为我想在跟踪级别之间进行区分,并且使用TraceSource类可以传递用于通知事件类型的参数,而在使用Trace类时我必须使用Trace.WriteLineIf然后验证类似SourceSwitch.TraceInformation和的东西SourceSwitch.TraceErrors,它甚至没有类似TraceVerbose或的属性TraceStart。 考虑到所有这些,您是否可以考虑按以下方式进行操作: 开始方法时,跟踪“开始”事件,该事件应表示单个逻辑操作或管道,以及传递给方法的参数值的字符串表示。 将项目插入数据库时​​,跟踪“信息”事件。 在重要的if / else语句中采用一条路径或另一条路径时,跟踪“信息”事件。 在catch块中跟踪“严重”或“错误”,具体取决于它是否是可恢复的错误。 完成该方法的执行时,跟踪“停止”事件。 另外,请说明何时最好跟踪“详细”和“警告”事件类型。如果您的示例代码具有良好的跟踪/记录功能并且愿意共享,那将是极好的选择。 注意:我在这里找到了一些很好的信息,但仍然不是我想要的信息:http : //msdn.microsoft.com/zh-cn/magazine/ff714589.aspx
53 .net  logging 

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.