我知道之前已经问过这个问题,但我还没有看到一个简短明了的答案,所以我希望他们不会删除这个问题,现在我会得到一个明确的答案:
我目前在C#5.0工作; .NET 4.5; VS 2012.虽然我已经做了大量的C#,但我主要是一名德尔福人.
在Delphi中,我已经编写了数百个使用以下设计的类工厂(这里很简单):
unit uFactory;
interface
type
TClassofMyClass = class of TMyClass;
TFactoryDict = TDictionary<TMyEnum, TClassofMyClass>;
var fDict:TFactoryDict;
implementation
procedure initDict;
begin
fDict:=TFactoryDict.create;
fDict.add(myEnum1, TMyClass1);
fDict.add(myEnum2, TMyClass2);
fDict.add(myEnum3, TMyClass3);
end;
function Factory(const aEnum: TMyEnum): TMyClass;
var
ClassofMyClass: TClassofMyClass;
begin
if fDict.TryGetValue(aEnum, ClassofMyClass) then
result := ClassofMyClass.Create(aParam);
end;
end.
Run Code Online (Sandbox Code Playgroud)
现在:我如何在C#中做这样的事情?!似乎C#中没有 '类'类型.我错过了什么吗?如何在C#中简单而优雅地实现这种类型的工厂?这个设计也可以在Python中实现 - 为什么C#会更糟??
我看到的所有使用的示例sql.Row,按位置访问查询的返回值:sql.Rows.scan()需要在对应于相应列的参数中正确定位的正确类型变量scan(),以检索返回的每个列值,例如在以下示例中:
rows, err := db.Query("SELECT name,age FROM users WHERE age>=50")
if err != nil {
log.Fatal(err)
}
for rows.Next() {
var name string
var age int
if err := rows.Scan(&name,&age); err != nil {
log.Fatal(err)
}
fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)
&name并且&age必须正确定位(第0列和第1列)以便Rows.Scan()使用正确的类型检索正确的值.
在我多年的生产系统开发中,我已经刻意避免这种做法,因为它不健壮:如果基于列位置,列的布局中的数据库更改将很容易破坏您的代码.
使用列名来检索值会更加健壮- 这可以使您免受对添加或删除会破坏基于位置的代码的列的数据库的更改.例如,在Delphi和C#,所有数据集,包括从查询返回值的列,支持FieldByName('age').asInteger或fields['age'].value,等
在Go中有什么方法可以做到这一点?如果没有,这是Go数据库支持的一个很大的缺点,并且非常令人失望 - 如上所述,根本不安全.
编辑: …
我在Windows 7 Pro 64和IIS 7.5上运行Delphi XE,开发了一个ISAPI应用程序.IIS配置正确(包括允许32位代码在ISAPI进程中运行).ISAPI进程正常运行.
在Delphi中,我试图附加到在localHost上运行的ISAPI进程以逐步执行我的ISAPI.dll代码:运行 - >附加到Process-> InetInfo.exe.
我已经使用Windows XP和IIS 5完成了这一千次,但在这个新环境中,我无法附加到ISAPI进程.尝试附加时,我在IDE中收到错误消息:
无法创建进程 - 不支持请求
这花费了我很多时间 - 我必须为每行代码抽出调试字符串,运行应用程序,然后查看我的调试字符串等.
为什么我不能加入ISAPI流程?这是IIS 7.5配置问题吗?可能与32/64位问题有关,因为IIS是本机64位而Delphi调试器是32位?
这可能不是一个很好的问题,因为我不知道任何支持这个功能的编译语言,但是由于Go总是令我惊讶,我还是会问它:
对于我自己的练习,我正在Go中编写一个小计算器程序.我想知道是否有一种方法可以声明并分配一个类型为"运算符"的变量,这样我就可以编写:
var o Operator
o = +
var o1 Operator
o1 = /
Run Code Online (Sandbox Code Playgroud)
并写这样的功能
func DoOperation(a,b int,o Operator) int{
return a o b
}
Run Code Online (Sandbox Code Playgroud)
(不,我不是在询问运营商是否超载.)
另外,我不知道任何支持这种事情的编译语言(我不是这方面的专家).我确实查看了运算符下的文档并没有发现任何内容.可以再次让我惊讶吗?
编辑: 接受的答案表明Haskell支持这一点,
我是Python的新手,我在Win 7-32工作站上安装了Python 3.2.尝试使用adodbapi-2.4.2.2连接到MSSQLServer 2005 Server,这是该软件包的最新更新.
代码/连接字符串如下所示:
conn = adodbapi.connect('Provider = SQLNCLI.1; Integrated Security = SSPI; Persist Security Info = False; Initial Catalog = XXX; Data Source = 123.456.789');
从adodbapi我不断得到错误(这是来自Wing IDE shell的完整错误消息):
回溯(最近一次调用最后一次):文件"D:\ Program Files\Wing IDE 4.0\src\debug\tserver_sandbox.py",第2行,如果名称 ==' main ':文件"D:\ Python32\Lib\site-packages\adodbapi\adodbapi.py",第298行,在connect中引发InterfaceError #Probably COM错误adodbapi.adodbapi.InterfaceError:
我可以跟踪代码并查看异常情况.
我也尝试使用带有OLEDB提供程序的conn字符串和集成的Windows安全性,结果相同.
所有这些连接字符串都可以从我的工作站上的UDL文件和SSMS中正常工作,但在adodbapi中失败并出现相同的错误.
我该如何解决?
我有下面提到的问题:
Delphi本机Web服务应用程序无法正常工作.IIS 7似乎正在剥离pathinfo
我做了答案2中概述的所有内容(见下面或那个URL)没有帮助 - 现在我根本无法运行DLL - Firefox想要下载文件,请求不会传递给ISAPI.我只能通过在VD的处理程序映射中明确允许我的webService DLL来启动WS ISAPI进程 - 然后默认的WS页面显示但是SOAP和WSDL永远不会被发出,如上面提到的帖子所述.
Delphi本机Web服务应用程序无法正常工作.IIS 7似乎正在剥离pathinfo
"...我永远无法访问SOAP.同样,WSDL Importer也无法访问SOAP ......问题是我在ISAPI dll的处理映射中创建了一个特定的脚本映射.导致IIS将所有请求重定向到特定的dll,这就是为什么忽略包含信息路径部分的任何请求.信息路径被剥离.
问题是我在ISAPI DLL的处理映射中创建了一个特定的脚本映射.这导致IIS将所有请求重定向到特定的dll,这就是为什么忽略包含信息路径部分的任何请求的原因.信息路径被剥离.
我真正需要做的是简单地启用ISAPI-dll模块映射处理程序映射的执行功能权限.一旦允许未指定的ISAPI模块(或CGI模块,如果这是您创建的Web服务器扩展模块),此模块映射可用于虚拟目录.
要解决我的问题,我需要
删除我搞砸了处理映射的目录.
由于我已经允许未指定的ISAPI模块(从服务器的IIS部分选择ISAPI和CGI限制小程序中的编辑功能设置),然后我需要为相应的网站添加一个新的虚拟目录(这里是我重新创建的我在上一步中删除的目录.
从虚拟目录的Handling Mappings小程序中,您可能已禁用ISAPI-dll处理映射.选择它并选择右侧的"编辑功能权限"选项.启用执行复选框."
我是一位非常有经验的开发人员 - 多年来使用Delphi,C#和C++完成了许多繁重的工作.我一直非常重视结构化编程,OOP,松耦合模块化设计等指南 - 因为我使用的所有语言都有内置的强制执行这些概念的方法 - 访问控制,静态类型,接口和抽象类支持等 - 我依靠这些来构建我的代码.
现在,我已经用Python乱画了几个月.我对它的许多精彩功能印象深刻 - 但我非常怀念内置的约束,这使得代码模块化和组织变得容易.而且,不幸的是,我看到很多用Python编写的"意大利面条代码",甚至来自非常可敬的来源.我不会单独出去任何人,但是我有一些由大联盟pythonistas编写的书籍,其中充满了充满设计的例子(更好的说 - "反设计")让我不寒而栗.在我看来,因为Python很容易使用,所以它也很容易被滥用.
我在Python编写代码时会尝试自我约束,但我发现需要执行大量额外的工作,而且我必须根据自己的设计记忆设置并遵守约束,而无需语言帮助一点都不 而且由于没有"编译时间"检查,这是非常困难的 - 通常你不会发现设计缺陷,直到你真正运行该段代码.
所以,我正在寻找非常具体的信息:一些例子或更好的仍然是一本关于WELL STRUCTURED Python设计和设计技术的书 - 如何最好地实现封装,间接,非常松散耦合的设计等.
来自一位着名的蟒蛇书籍作者的糟糕设计IMO - (混淆)
def populateList(self, selecteddisk=None):
selected = None ***#Bundling - coupling:***
self.listWidget.clear()
for disk in self.disks.inOrder():
item = QListWidgetItem(QString("%1 of %2/%3 (%L4)") \
.arg(disk.name).arg(disk.owner).arg(disk.country) \
.arg(disk.teu))
self.listWidget.addItem(item)
***#Bundling - coupling:***
if selecteddisk is not None and selecteddisk == id(disk):
selected = item
if selected is not None:
selected.setSelected(True)
self.listWidget.setCurrentItem(selected)
Run Code Online (Sandbox Code Playgroud) 我想在Python 3.2中使用'protected'访问来设置一个类层次结构:基类的成员只在派生类的范围内,而不是'public'.
双下划线使成员"私有",单个下划线表示警告但成员仍为"公共".什么(如果有的话)是指定"受保护"成员的正确语法.
使用Delphi XE:
XML数据绑定向导基于XML/XSD生成Delphi类 - 效果很好.
但我还需要采取另一种方式:将Delphi类转换为XML.我在XE中找不到任何支持.(我知道这是很简单的用C#实现,.NET,但很明显,因为德尔福真的不支持的反思这是一个很多比用C#更加困难)
我有一个选择是使用SharpDevelop在C#中编写类,并使用MS实用程序(我认为是免费下载)从C#代码生成XML.我也有VS 2005支持这个,但它没有安装,我宁愿不参与其中).
有人建议如何完成这项任务:直接从Delphi到XML/XSD?一个开源工具会很好,或者一些好的单位会做到这一点.
C++和其他几种语言都有一个函数sizeof(int)(或者你需要的任何类型),它返回当前系统中特定数据类型消耗的字节数.
Go中是否有相同的功能?它是什么?