Questions tagged «c#»

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

2
n层实体框架解决方案的依赖注入
我当前正在设计一个使用实体框架5(.net 4)作为其数据访问策略的n层解决方案,但是我担心如何合并依赖项注入以使其可测试/灵活。 我当前的解决方案布局如下(我的解决方案称为Alcatraz): Alcatraz.WebUI:一个asp.net Webform项目(前端用户界面)引用项目Alcatraz.Business和Alcatraz.Data.Models。 Alcatraz.Business:一个类库项目,包含业务逻辑,引用项目Alcatraz.Data.Access,Alcatraz.Data.Models Alcatraz.Data.Access:一个类库项目,包含AlcatrazModel.edmx和AlcatrazEntitiesDbContext,引用项目Alcatraz.Data.Models。 Alcatraz.Data.Models:一个类库项目,包含Alcatraz模型的POCO,无引用。 我对这个解决方案如何工作的愿景是,Web-ui将实例化业务库中的存储库,该存储库将具有(通过构造函数)连接字符串(而不是AlcatrazEntities实例)的依赖项。Web用户界面会知道数据库连接字符串,但不知道它是一个实体框架连接字符串。 在业务项目中: public class InmateRepository : IInmateRepository { private string _connectionString; public InmateRepository(string connectionString) { if (connectionString == null) { throw new ArgumentNullException("connectionString"); } EntityConnectionStringBuilder connectionBuilder = new EntityConnectionStringBuilder(); connectionBuilder.Metadata = "res://*/AlcatrazModel.csdl|res://*/AlcatrazModel.ssdl|res://*/AlcatrazModel.msl"; connectionBuilder.Provider = "System.Data.SqlClient"; connectionBuilder.ProviderConnectionString = connectionString; _connectionString = connectionBuilder.ToString(); } …

2
Webkit作为.Net / Mono中的GUI
我想制作一个跨平台应用程序,该应用程序还将有一个网站,桌面应用程序(Windows,iOS,Linux)将与服务器进行对话,并使用户数据保持同步。 到目前为止,我看到的选择是: 为这三个操作系统中的每一个编写一个本机GUI,所以我将拥有3个GUI代码库(和一个后端系统) 使用类似GTK的工具,这样我就可以在所有提及的平台上使用一个受支持的系统。 但是我无法找到更多信息的第三个窗口(可能是因为我对C#和.Net还是陌生的,所以我没有搜索正确的术语)是要有一个内置了嵌入式WebKit实例的窗口,这将允许我使用与网站相同的GUI系统。这将使客户端应用程序和网站看起来彼此尽可能接近,从而使用户熟悉该界面。 WebKit的最后一个选项是否合理?我已经非常了解JavaScript / HTML,并且如果我可以使用该知识来创建界面,那将很棒。这也是允许用户使用插件自定义界面的好方法,并且他们可以使从本地到Web的任何UI首选项保持同步。
12 c#  .net  javascript  gui  mono 

5
是否应该将抽象类中的所有公共方法标记为虚拟?
最近,我不得不在正在使用的某些OSS上更新抽象基类,以便通过将它们虚拟化来使其更具可测试性(我不能使用将两个接口组合在一起的接口)。这让我开始思考是否应该标记我需要虚拟的所有方法,还是应该标记每个公共方法/属性都是虚拟的。我通常同意Roy Osherove的观点,即每种方法都应该虚拟化,但是我遇到了这篇文章,使我开始思考是否需要这样做。为了简单起见,我将限于抽象类,但是(我确定所有具体的公共方法都应该是虚拟的都是值得商de的)。 我可以看到您可能希望在哪里允许子类使用方法,而不希望它覆盖实现。但是,只要您相信将遵循Liskov的替代原则,那为什么不容许它被取代呢?通过将其标记为抽象,无论如何都在强制某种重写,因此,在我看来,抽象类内部的所有公共方法都应确实标记为虚拟。 但是,我想问一下是否有我可能没有想到的事情。应该将抽象类中的所有公共方法设为虚拟吗?

11
有意义的运算符重载示例
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 在学习C#时,我发现C#支持运算符重载。我有一个很好的例子有问题: 有道理(例如,添加名为羊和牛的类) 不是两个字符串串联的示例 欢迎使用基类库中的示例。
12 c#  .net  operators 

4
有不必要的参考和使用会有什么后果?
我有些怪异,并且倾向于通过清除using每个类中的引用和s 来保留我的项目,以仅保留实际使用的内容。 我还能提出什么其他论据(除了使我的OCD平静下来)保持基本要领?我主要在考虑系统参考,对自定义工作的任何参考都会带来很多向后兼容性的问题。发行版占用空间更大吗?编译时间更长?
12 c# 

3
实体框架和层分离
我正在尝试与Entity Framework一起工作,但遇到了有关层分离的问题。 我通常使用UI-> BLL-> DAL方法,我想知道如何在这里使用EF。 我的DAL通常是这样的 GetPerson(id) { // some sql return new Person(...) } BLL: GetPerson(id) { Return personDL.GetPerson(id) } 用户界面: Person p = personBL.GetPerson(id) 现在的问题是:由于EF创建了我的模型和DAL,将EF包装在我自己的DAL中是一个好主意还是只是浪费时间? 如果不需要包装EF,我仍然可以将Model.esmx放置在其自己的类库中,还是将其放置在BLL中并在其中工作是可以的吗? 我真的看不出将EF包装在我自己的DAL中的原因,但是我想知道其他人在做什么。 因此,除了上述内容之外,我将省略DAL并执行以下操作: BLL: GetPerson(id) { using (TestEntities context = new TestEntities()) { var result = from p in context.Persons.Where(p => p.Id = …

4
C#中哈希表和字典的实际大小限制
C#4词典或哈希表可以包含的项目数量的实际限制是多少,这些结构可以合理包含的字节总数。我将处理大量对象,并想知道这些结构何时开始遇到问题。 对于上下文,我将使用具有大量内存的64位系统。另外,我将需要使用某种形式或“键”来查找对象。鉴于性能需求,这些对象将需要驻留在内存中,并且许多对象将长期存在。 尽管我需要避免使用第三方或开放源代码库,但还是可以建议其他方法/模式。出于规范原因,我需要能够使用本机C#(或C ++ \ CLI)来构建它。

4
使用/编写.Net自定义成员资格提供程序有哪些缺点?
最近,我在SO上发布了以下问题:https : //stackoverflow.com/questions/7197337/using-asp-net-membership-provider-with-an-existing-user-database 您可能会注意到,我最后回答了我自己的问题,指出编写/实现“自定义成员资格提供程序”看起来是一种方法。 从字面上看,几分钟后,我偶然发现了这个问题:https : //stackoverflow.com/questions/7222306/simple-login-attempt-counter-using-mvc-3-and-ajax/7222407#7222407 我尝试回答并获得评论,.Net成员资格提供程序“在许多级别上都很糟糕”。我承认,这是我第一次使用会员资格提供程序,但对我来说确实如此。 我没有看到任何支持“可怕”主张的东西,因此在实施“可怕”之前,我希望能从社区中得到一些反馈。

6
是否有任何文件说明了.NET BigIntegers的确切数字范围?
我正在使用.NET BigInteger,基本上我想知道是什么数字(估计的答案会很好) 是((操作所需时间增加的图表)vs (BigInteger的值)? 还是它们的设计没有这样的偏差,如果我们将操作所需的时间与BigInteger的值之间的增量从1绘制到无穷大,我们将一直保持平滑的曲线吗? 例如,假设数组被设计为可以处理50个项目。这意味着如果我有1个项目,则运算是f(1)时间。当我有2个项目时,运算时间为f(2)。如果我有50个项目,则操作时间为f(50)。但由于它仅设计用于处理50个项目,因此当我们拥有51个项目时,所执行的操作将为g(51),其中g(51)> f(51)。 如果实施正确,BigInteger算法的复杂度应为平滑曲线。例如,乘法的时间复杂度应为O(NM),其中N是第一个被乘数的位数,而M是第二个被乘数的位数。当然,有实际的限制,因为您可以选择N和M太大,以至于这些数字都不适合您的计算机。 是否有/任何人知道任何声称已如此实施的文件?
12 c#  .net  vb.net  numbers 

8
面向对象的类设计
我想知道好的面向对象的类设计。特别是,我很难在以下两个选项之间做出选择: 静态与实例方法 没有参数或返回值的方法 vs 有参数和返回值的方法 重叠与独特的方法功能 私人与公共方法 范例1: 此实现使用实例方法,没有返回值或参数,没有重叠的功能,并且所有方法都是公共的 XmlReader reader = new XmlReader(url); reader.openUrl(); reader.readXml(); Document result = reader.getDocument(); 范例2: 此实现使用静态方法,返回值和参数,功能重叠和私有方法 Document result = XmlReader.readXml(url); 在示例一中,所有方法都是公共实例,这使得它们易于进行单元测试。尽管所有方法都不同,但readXml()依赖于openUrl(),因为必须首先调用openUrl()。所有数据都在实例字段中声明,因此,除了构造函数和访问器之外,任何方法都没有返回值或参数。 在示例二中,只有一种方法是公共的,其余的是私有静态的,这使得它们很难进行单元测试。方法是重叠的,因为readXml()调用openUrl()。没有字段,所有数据均作为方法中的参数传递,并且结果立即返回。 我应该遵循什么原则来进行正确的面向对象编程?

3
当前分页实现的设计问题
我已经在asp.net mvc上专门检查了分页实现,我真的觉得实现中的效率较低。 首先,所有实现都使用如下所示的分页值。 public ActionResult MostPopulars(int pageIndex,int pageSize) { } 我觉得不对的是pageIndex和pageSize完全应该是Pagination类的成员,否则这种方式看起来功能太多。它还简化了应用程序层中不必要的参数传递。 第二件事是他们使用下面的界面。 public interface IPagedList<T> : IList<T> { int PageCount { get; } int TotalItemCount { get; } int PageIndex { get; } int PageNumber { get; } int PageSize { get; } bool HasPreviousPage { get; } bool HasNextPage …

5
为什么Windows Forms / Swing框架偏爱继承而不是Composition?
今天,我的一位教授评论说,他发现奇怪的是,尽管SWT的哲学是通过合成来进行自己的控制,但Swing似乎更喜欢继承。 我几乎没有接触过这两个框架,但是从我记得在C#的Windows窗体中,通常可以扩展控件,就像Swing一样。 既然人们通常倾向于使用合成而不是继承,那么Swing / Windows Forms的人们为什么不偏爱使用合成而不是继承?
12 c#  java  swing  forms 

6
学习C#并陷入车辙[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我已经学习C#/。NET 4.0大约2/3个月了,这是我的第一门认真的编程语言(之前我研究过PHP,HTML,CSS,JavaScript和VBA,但从未深入研究过),开始变得有点卡住: 由于缺乏“大”项目,我的学习达到了顶峰。 缺乏复杂项目的工作使我对自己的能力产生怀疑。 2周前,我接受了一名初级程序员工作的面试,并设法回答了我的大部分问题,但由于缺乏实践经验,我仍然没有找到工作,我不确定该怎么做。做! 就像我之前说过的,我不会为开源项目做贡献,但是我不知道从哪里开始,我认为“大”项目只想要优秀的程序员:( 是否有任何形式的在线编程测试可以向我展示我目前的“好”(或“坏”)?:) 谢谢你的帮助。

1
如何对数据库逻辑进行单元测试?
关于TDD,我仍然遇到一个小问题。 我需要一种方法,该方法将从数据层(linq2SQL)中获取已过滤数据的特定记录集。请注意,我使用的是从DBML生成的linq生成的类。现在的问题是我要为此编写测试。 我是否: a)首先将记录插入测试中,然后执行方法并测试结果 b)使用数据库中可能存在的数据。不热衷于这种逻辑会导致事情破裂。 c)你有什么建议?
12 c#  unit-testing 

5
为什么要用最少的用户/手写代码来完成XAML中的所有工作?
我觉得MVVM社区已经像90年代的OO程序员一样变得过分热情-这是一个错误的称呼MVVM是没有代码的代名词。从我关闭的StackOverflow问题中: 我多次在这里遇到有关某人试图在XAML中完成等效操作而不是在后面编写代码的帖子。他们唯一的理由是他们希望将代码保持在“干净”的后面。如果我错了,请纠正我,但事实并非如此: XAML也被编译为BAML,然后无论如何在运行时都必须将其解析为代码。XAML可能具有更多的运行时错误,因为编译器在编译时不会从错误的拼写中拾取它们,这些错误也更难调试。后面已经有代码-是否喜欢InitializeComponent(); 必须运行,并且其中的.gics文件包含一堆代码,尽管它可能是隐藏的。这纯粹是心理上的吗?我怀疑是开发人员来自网络背景,喜欢标记而不是代码。 编辑:我不建议在XAML后面编写代码-两者都使用-我也希望在XAML中进行绑定-我反对采取一切措施避免在WPF应用程序中的esp后面编写代码-这应该是两者都可以最大程度地发挥作用。 更新:这甚至不是微软的想法,MSDN上的每个示例都展示了如何在两者中都可以做到。
12 c#  wpf 

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.