小编sta*_*ica的帖子

我应该在Windows窗体项目中使用数据绑定吗?

我正在使用Winforms开发一个应用程序,并且使用了一个数据绑定我的网格的路径BindingSource.我的问题是:

这是最好的方法吗?我应该手动填充单元格而不是让它BindingSource为我做吗?它会导致进一步的问题吗?如果在任何情况下数据绑定会产生问题,那将是有用的.

我的一位同事发誓黑色和蓝色不使用数据绑定.我真的不相信他说的话,所以任何利弊都是有价值的.

在连接到单个数据库和可编辑DataGrid的多用户应用程序的情况下,如何解决更新数据的并发问题?

c# data-binding winforms

8
推荐指数
2
解决办法
8425
查看次数

在现场测试中,"具体执行"是什么意思?

当我学习古兰经测试的概念时,我遇到了"具体和符号执行"这两个术语.(那里提到的文章,"CUTE:C的一个古老的单元测试引擎",在其摘要部分使用该术语.)

"所使用的方法建立在先前的工作基础上,结合了符号和具体执行,更具体地说,使用这样的组合来生成测试输入以探索所有可行的执行路径."

任何人都可以确认"具体执行"是什么意思吗?尽管我搜索,但我找不到任何直接引用/明确陈述.

根据我的理解,"具体执行"意味着"执行具有实际输入值的程序,而不像符号执行,它假定符号值为变量,输入等".如果我错了,请纠正我(如果可能的话,用一个小例子).

testing formal-verification execution

8
推荐指数
1
解决办法
3272
查看次数

您使用的是事件流媒体产品吗?

也许您熟悉事件流处理(ESP)的概念......如果您愿意,我很乐意听到您正在使用的内容以及您正在使用它们的平台.我是Esper项目的积极贡献者(http://esper.codehaus.org/),但我有兴趣听听其他人使用的内容吗?有人使用Coral8,Aleri或Streambase吗?你在哪些平台上使用它们?

esper streambase event-stream-processing

7
推荐指数
0
解决办法
699
查看次数

为什么COM(组件对象模型)与语言无关?

我知道COM在语言和应用程序的二进制级别上提供了可重用性.我读到为COM构建的所有组件必须遵循标准内存布局才能与语言无关.

我不明白"标准内存布局"是什么意思.

是什么让COM语言独立?

c++ com

7
推荐指数
1
解决办法
2701
查看次数

C#中的类型安全区分联合,或者:如何限制接口的实现数量?

首先,对于冗长的帖子感到抱歉.基本上,我的问题是:

我试图在C#中重现以下F#区别联合类型:

type Relation =
     | LessThan of obj * obj
     | EqualTo of obj * obj
     | GreaterThan of obj * obj
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一个比以下更简单的基于接口的解决方案?


interface IRelation // concrete types represent ? in the expression "Subject ? Object"
{
    object Subject { get; }
    object Object  { get; }
}

struct LessThanRelation    : IRelation { … }
struct EqualToRelation     : IRelation { … }
struct GreaterThanRelation : IRelation { … }
Run Code Online (Sandbox Code Playgroud)

我的所有算法都识别这三种关系类型,而这些只是这些,所以我需要阻止IRelation第三方(即其他程序集)的任何进一步实现.

脚注:对某些人来说,如果我只是在面向对象/多态性方面得到了我的接口和算法,那么可能会出现第三方实现被注入到我的算法方法中并不重要,只要接口是正确实施.这是一个有效的批评.但是,让我们假设,在这种情况下,我倾向于在严格的面向对象上采用更多功能编程风格.

我的最好的办法,到目前为止是宣布所有以上类型的internal(即它们将永远不会被外人直接看到.),并创建一个代理类型Relation,这将是唯一可见的类型的第三方: …

c# f# interface algebraic-data-types discriminated-union

7
推荐指数
2
解决办法
1692
查看次数

使用变量代替函数名称

我现在正在使用以下内容:

foreach (string file in files) {
    switch (filetype.Value) {
        case "ReadFile":
            ReadFile(file);
            break;
        case "ReadMSOfficeWordFile":
            ReadMSOfficeWordFile(file);
            break;
        case "ReadMSOfficeExcelFile":
            ReadMSOfficeExcelFile(file);
            break;
        case "ReadPDFFile":
            ReadPDFFile(file);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但感觉有点不对劲.Python的方式更像是这样的:

foreach string file in files:
    filetype.Value(file)
Run Code Online (Sandbox Code Playgroud)

我很难想象C#不能做这样的事情.可能是我的Google技能不好,但我似乎无法弄明白.

public static readonly IDictionary<string, Action<string>> FileTypesDict = new Dictionary<string,Action<string>> {
    {"*.txt", ReadFile},
    {"*.doc", ReadMSOfficeWordFile},
    {"*.docx", ReadMSOfficeWordFile},
    {"*.xls", ReadMSOfficeExcelFile},
    {"*.xlsx", ReadMSOfficeExcelFile},
    {"*.pdf", ReadPDFFile},
};
Run Code Online (Sandbox Code Playgroud)

 

foreach (KeyValuePair<string, Action<string>> filetype in FileTypesDict) {
    string[] files = Directory.GetFiles(FilePath, filetype.Key, SearchOption.AllDirectories);
    //System.Reflection.MethodInfo ReadFileMethod = ReadFile.GetType().GetMethod(filetype.Value);
    foreach (string …
Run Code Online (Sandbox Code Playgroud)

.net c#

7
推荐指数
2
解决办法
5413
查看次数

为什么COM互操作优于.NET中的P/Invoke?

在我们的项目中,我们在asp.net应用程序中通过COM重用了很多Delphi代码.

像这样:遗留delphi dll => delphi COM wrapper => .Net interop => asp.net(mvc)

我们有一些关于访问冲突,卸载dll等的问题......我现在已经移植了一些直接通过P/Invoke代码使用遗留dll.

当我查看有关COM和P/Invoke的资源时,人们几乎总是建议使用COM.这是为什么?P/Invoke不具有以下好处:

  • 签出代码将始终使用正确的dll而不是最后注册的COM
  • 多个版本可以在服务器上并行运行(例如:DEV,TEST和QA)
  • 没有更多的COM注册麻烦
  • 比COM通信快得多(我读过的文章表明速度提高了30%)

.net com pinvoke interop

7
推荐指数
1
解决办法
2789
查看次数

使用扩展方法"编程到接口":什么时候走得太远?

背景:本着"编程接口,而不是实现"Haskell类型的精神,作为编码实验,我在考虑创建一个主要基于接口和扩展组合的API意味着什么方法.我有两条准则:

  1. 尽可能避免类继承.接口应该实现为sealed classes.
    (这有两个原因:首先,因为子类化引发了一些关于如何在派生类中指定和强制执行基类'契约的讨厌问题.其次,这就是Haskell类型类的影响,多态不需要子类化.)

  2. 尽可能避免使用实例方法.如果可以使用扩展方法完成,则首选这些方法.
    (这是为了帮助保持接口紧凑:通过其他实例方法的组合可以完成的所有操作成为扩展方法.接口中剩下的是核心功能,特别是状态改变方法.)

问题:我遇到了第二条准则的问题.考虑一下:

interface IApple { }
static void Eat(this IApple apple)
{
    Console.WriteLine("Yummy, that was good!");
}

interface IRottenApple : IApple { }
static void Eat(this IRottenApple apple)
{
    Console.WriteLine("Eat it yourself, you disgusting human, you!");
}

sealed class RottenApple : IRottenApple { }
IApple apple = new RottenApple();
// API user might expect virtual dispatch to happen (as usual) when 'Eat' is called:
apple.Eat(); // ==> …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods api-design interface

7
推荐指数
1
解决办法
552
查看次数

依赖注入避免在启动时加载所有内容

我正在尝试使用依赖注入与MVP将所需的依赖项注入构造函数.我遇到的问题是,如果我在根MainWindowPresenter上使用依赖注入,所有它的子演示者及其子演示者,视图和服务都将在启动时加载.由于所有内容都是直接或间接从MainWindowPresenter加载的,这意味着整个应用程序将在启动时加载到内存中.

我知道在.NET中创建所有对象在启动时可能不会花费很多,但我不禁认为这是浪费内存,因为它们永远不会同时被使用.有一些像AboutPresenter或HelpPresenter可能永远不会被使用.我错过了或者这是依赖注入应该如何工作?有没有解决的办法?

我能找到解决这个问题的唯一方法是使用工厂,然后可以在需要时创建子演示者/视图/服务.例如:

class HelpFactory : AbstractHelpFactory
{
    public IHelpPresenter Create()
    {
         IHelpService helpService = new ConcreteHelpService();
         IHelpView helpView = new ConcreteHelpView();

         HelpSearchPresenter searchPresenter = HelpSearchFactory.Create();

         return HelpPresenter(helpView, helpService, searchPresenter);
    }
}
Run Code Online (Sandbox Code Playgroud)

这与工厂当时依赖于子工厂基本相同,但至少它们比演示者/视图/服务更轻,并且他们不需要在需要之前加载子工厂.

.net mvp dependency-injection

7
推荐指数
1
解决办法
463
查看次数

我可以在App.config中声明和使用DTD实体吗?

我试图在我的内部定义和使用DTD实体App.config.例如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration [
  <!ENTITY dataSource ".\SQLEXPRESS">
]>
<configuration>
  <appSettings>
    <add key="FooDataSource" value="&dataSource;" />
  </appSettings>
  <connectionStrings>
    <add name="Foo" connectionString="Data Source=&dataSource;;Integrated Security=SSPI;" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

使用System.Configuration.ConfigurationManagerappSettingsconnectionStrings不会引发错误,但它也不能解决DTD实体.

(有时程序根本不会执行.我不知道为什么.NET有时会抱怨配置错误.)

我对DTD的使用是否不正确,或者.NET不支持自定义DTD实体App.config

.net dtd app-config

7
推荐指数
1
解决办法
701
查看次数