我正在使用Winforms开发一个应用程序,并且使用了一个数据绑定我的网格的路径BindingSource.我的问题是:
这是最好的方法吗?我应该手动填充单元格而不是让它BindingSource为我做吗?它会导致进一步的问题吗?如果在任何情况下数据绑定会产生问题,那将是有用的.
我的一位同事发誓黑色和蓝色不使用数据绑定.我真的不相信他说的话,所以任何利弊都是有价值的.
在连接到单个数据库和可编辑DataGrid的多用户应用程序的情况下,如何解决更新数据的并发问题?
当我学习古兰经测试的概念时,我遇到了"具体和符号执行"这两个术语.(那里提到的文章,"CUTE:C的一个古老的单元测试引擎",在其摘要部分使用该术语.)
"所使用的方法建立在先前的工作基础上,结合了符号和具体执行,更具体地说,使用这样的组合来生成测试输入以探索所有可行的执行路径."
任何人都可以确认"具体执行"是什么意思吗?尽管我搜索,但我找不到任何直接引用/明确陈述.
根据我的理解,"具体执行"意味着"执行具有实际输入值的程序,而不像符号执行,它假定符号值为变量,输入等".如果我错了,请纠正我(如果可能的话,用一个小例子).
也许您熟悉事件流处理(ESP)的概念......如果您愿意,我很乐意听到您正在使用的内容以及您正在使用它们的平台.我是Esper项目的积极贡献者(http://esper.codehaus.org/),但我有兴趣听听其他人使用的内容吗?有人使用Coral8,Aleri或Streambase吗?你在哪些平台上使用它们?
我知道COM在语言和应用程序的二进制级别上提供了可重用性.我读到为COM构建的所有组件必须遵循标准内存布局才能与语言无关.
我不明白"标准内存布局"是什么意思.
是什么让COM语言独立?
首先,对于冗长的帖子感到抱歉.基本上,我的问题是:
我试图在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,这将是唯一可见的类型的第三方: …
我现在正在使用以下内容:
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) 在我们的项目中,我们在asp.net应用程序中通过COM重用了很多Delphi代码.
像这样:遗留delphi dll => delphi COM wrapper => .Net interop => asp.net(mvc)
我们有一些关于访问冲突,卸载dll等的问题......我现在已经移植了一些直接通过P/Invoke代码使用遗留dll.
当我查看有关COM和P/Invoke的资源时,人们几乎总是建议使用COM.这是为什么?P/Invoke不具有以下好处:
背景:本着"编程接口,而不是实现"和Haskell类型的精神,作为编码实验,我在考虑创建一个主要基于接口和扩展组合的API意味着什么方法.我有两条准则:
尽可能避免类继承.接口应该实现为sealed classes.
(这有两个原因:首先,因为子类化引发了一些关于如何在派生类中指定和强制执行基类'契约的讨厌问题.其次,这就是Haskell类型类的影响,多态不需要子类化.)
尽可能避免使用实例方法.如果可以使用扩展方法完成,则首选这些方法.
(这是为了帮助保持接口紧凑:通过其他实例方法的组合可以完成的所有操作成为扩展方法.接口中剩下的是核心功能,特别是状态改变方法.)
问题:我遇到了第二条准则的问题.考虑一下:
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) 我正在尝试使用依赖注入与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)
这与工厂当时依赖于子工厂基本相同,但至少它们比演示者/视图/服务更轻,并且他们不需要在需要之前加载子工厂.
我试图在我的内部定义和使用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.ConfigurationManager读appSettings或connectionStrings不会引发错误,但它也不能解决DTD实体.
(有时程序根本不会执行.我不知道为什么.NET有时会抱怨配置错误.)
我对DTD的使用是否不正确,或者.NET不支持自定义DTD实体App.config?
.net ×4
c# ×4
com ×2
interface ×2
api-design ×1
app-config ×1
c++ ×1
data-binding ×1
dtd ×1
esper ×1
execution ×1
f# ×1
interop ×1
mvp ×1
pinvoke ×1
streambase ×1
testing ×1
winforms ×1