Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。

9
参数可以恒定吗?
我正在寻找与Java等效的C#final。是否存在? C#是否具有以下内容: public Foo(final int bar); 在上面的示例中,bar是只读变量,不能通过进行更改Foo()。在C#中有什么方法可以做到这一点? 比如,也许我还有很长的方法,将与其合作x,y和z一些对象(整数)的坐标。我想绝对确定该函数不会以任何方式更改这些值,从而损坏数据。因此,我想将它们声明为只读。 public Foo(int x, int y, int z) { // do stuff x++; // oops. This corrupts the data. Can this be caught at compile time? // do more stuff, assuming x is still the original value. }

6
泛型类的静态成员是否绑定到特定实例?
这更多是文档而不是实际问题。到目前为止,这似乎还没有得到解决(除非我错过了),所以这里是: 想象一下一个包含静态成员的通用类: class Foo<T> { public static int member; } 每个特定类是否都有成员的新实例,或者所有Foo型类只有一个实例? 可以通过以下代码轻松验证: Foo<int>.member = 1; Foo<string>.member = 2; Console.WriteLine (Foo<int>.member); 结果如何?此行为记录在哪里?
83 c#  .net  generics  static 

4
正确使用log4net的方式(记录器命名)
有两种配置和使用log4net的方法。第一个是可以配置自己的附加程序和关联的记录器的时间: <!-- language: xml --> <appender name="myLogAppender" type="log4net.Appender.RollingFileAppender" > <file value="Logs\myLog.log" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level - %message%n" /> </layout> </appender> <logger name="myLog"> <level value="All"></level> <appender-ref ref="myLogAppender" /> </logger> 然后,当我想在日志中写入内容时,可以执行以下操作: ILog log = LogManager.GetLogger("myLog"); log.Info("message"); 使用它的另一种方法是将root配置为我想要的详细信息: <!-- language: xml --> <root> <level value="Error" /> <appender-ref ref="myLogAppender" /> </root> 在这种情况下,我可以记录以下消息: …

5
如何加快将项目添加到ListView的速度?
我要在WinForms ListView中添加几千个(例如53,709个)项目。 尝试1:13,870 ms foreach (Object o in list) { ListViewItem item = new ListViewItem(); RefreshListViewItem(item, o); listView.Items.Add(item); } 这非常糟糕。最明显的第一个解决方法是致电BeginUpdate/EndUpdate。 尝试2:3,106 ms listView.BeginUpdate(); foreach (Object o in list) { ListViewItem item = new ListViewItem(); RefreshListViewItem(item, o); listView.Items.Add(item); } listView.EndUpdate(); 这样比较好,但是仍然慢了一个数量级。让我们将创建ListViewItems与添加ListViewItems分开,以便找到真正的罪魁祸首: 尝试3:2,631 ms var items = new List<ListViewItem>(); foreach (Object o …

5
减少存储库以汇总根
目前,我几乎为数据库中的每个表都拥有一个存储库,并希望通过减少DDD使其仅聚合根来进一步使自己与DDD保持一致。 假设我有下表User和Phone。每个用户可能有一个或多个电话。没有聚合根的概念,我可能会做这样的事情: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 集合根的概念比实际更容易在纸上理解。我将永远不会拥有不属于用户的电话号码,因此取消PhoneRepository并将电话相关的方法合并到UserRepository中是否有意义?假设答案是肯定的,我将重写先前的代码示例。 我可以在UserRepository上使用返回电话号码的方法吗?还是应该始终返回对用户的引用,然后遍历用户之间的关系以获取电话号码: List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone 无论我以哪种方式获得电话,假设我修改了其中一部电话,如何进行更新?我有限的理解是,应该通过根目录更新根目录下的对象,这将使我朝下面的选择#1前进。尽管这可以很好地与Entity Framework一起很好地工作,但这似乎没有什么描述性,因为即使Entity Framework在图形中更改对象的选项卡上,阅读代码我也不知道我实际更新的内容。 UserRepository.Update(user); // …

9
命名空间还是程序集?
我对命名空间和程序集感到非常困惑。是System.Data和System.Web命名空间或程序集? 我注意到这些被称为命名空间,并且它们同时存在于GAC_32文件夹中。那到底是什么呢?


12
如何在GAC中注册.NET DLL文件?
我已经制作了一个.NET.DLL文件,我想在GAC中注册。 我在Windows Server 2003命令提示符中使用了以下命令: C:\"Path of dll"\>gacutil /i dllname.dll 'gacutil' is not recognized as an internal or external command, operable program or batch file. 它说路径不正确。 我是否需要在.NET cmd提示符下使用它?如果是这样,我将无法找到.NET cmd提示符。


3
WPF MVVM为什么使用ContentControl + DataTemplate视图而不是直接的XAML窗口视图?
为什么这个? MainWindow.xaml: <Window x:Class="MVVMProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <ContentControl Content="{Binding}"/> </Grid> </Window> 将您的ExampleView.xaml设置为: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vms="clr-namespace:MVVMProject.ViewModels"> <DataTemplate DataType="{x:Type vms:ExampleVM}" > <Grid> <ActualContent/> </Grid> </DataTemplate> </ResourceDictionary> 并创建如下窗口: public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow app = new MainWindow(); ExampleVM context = new ExampleVM(); …
83 c#  wpf  xaml  mvvm  architecture 

7
早期和晚期绑定
当C#中发生早期/晚期绑定时,我想尽我所能。 非虚拟方法始终是早期约束。虚拟方法总是晚绑定的:编译器插入额外的代码来解析在执行时绑定到的实际方法,并检查类型安全性。因此,亚型多态性使用后期绑定。 使用反射的调用方法是后期绑定的一个示例。我们编写代码来实现此目的,而不是编译器。(例如,调用COM组件。) 关闭Option Strict时,VB.NET支持隐式后期绑定。将对象分配给声明为Object类型的变量时,该对象将被后期绑定。VB编译器在执行时插入代码以绑定到正确的方法并捕获无效的调用。C#不支持此功能。 我朝着正确的方向前进吗? 通过接口引用调用委托和调用方法呢?是早期绑定还是后期绑定?


7
静态方法继承的正确替代方法是什么?
我了解C#不支持静态方法继承。我还阅读了许多讨论(包括此处的讨论),在这些讨论中,开发人员声称需要此功能,典型的回答是“如果需要静态成员继承,则设计中会有缺陷”。 好吧,鉴于OOP甚至不想让我考虑静态继承,因此我必须得出结论,我对它的明显需求指向了我的设计中的错误。但是,我被困住了。我非常感谢您为解决此问题提供的帮助。这是挑战... 我想创建一个封装了一些复杂的初始化代码的抽象基类(我们称它为Fruit)。该代码不能放在构造函数中,因为其中一些将依赖于虚拟方法调用。 Fruit将被其他具体类(Apple,Orange)继承,每个具体类都必须公开一个标准工厂方法CreateInstance()来创建和初始化实例。 如果静态成员继承是可行的,我将把工厂方法放在基类中,并使用对派生类的虚拟方法调用来获取必须从中初始化具体实例的类型。客户端代码将简单地调用Apple.CreateInstance()以获得完全初始化的Apple实例。 但是显然这是不可能的,所以有人可以解释一下我的设计需要如何更改以适应相同的功能。
83 c#  .net  inheritance  static 


3
Newtonsoft JSON反序列化
我的JSON如下: {"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]} 我找到了C#的Newtonsoft JSON.NET反序列化库。我尝试如下使用它: object JsonDe = JsonConvert.DeserializeObject(Json); 如何访问JsonDe对象以获取所有“类型”数据?我尝试了一个循环,但由于对象没有枚举器而无法正常工作。

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.