我是一名专家C#3/.NET 3.5程序员,希望使用System.Reflection.Emit.DynamicMethod开始运行一些运行时代码.我很想通过熟悉IL来提升到一个新的水平.
任何指针(双关语)?
我正在寻找一个代码生成器,而不是生成C#代码来访问WADL文件描述的RESTful Web服务,其方式与wadl2java的工作方式类似.
做som搜索我遇到了关于Google Code 的rest-api-code-gen项目,但是虽然最新的源代码实际上支持C#,但REST Describe&Compile演示站点却没有.(C#按钮在那里,但它已被禁用.)
我意识到我可以下载源代码并使用最新版本设置我自己的服务器,但我不愿意,因为我需要的是命令行工具,而不是依赖于Google Web Toolkit的Web应用程序.我想我可以根据相同的源代码编写自己的命令行工具,但如果已经完成,或者其他工具可以完成这项工作,我宁愿避免使用它.
所以,我想知道,有那样的工具吗?
问题
假设我试图将手机模型化为普通手机和PDA的组合.这是一种多重继承方案(手机是手机,它是 PDA).由于C#不支持多重继承,因此这几乎需要某种组合.另外,让我们说我还有其他理由支持作曲.
我一直想知道:是否有任何工具可以自动生成所有不可避免的传递代码?
让我用一些实际的代码充实我的例子:
接口:
public interface IPhone
{
public void MakeCall(int phoneNumber);
public void AnswerCall();
public void HangUp();
}
public interface IPda
{
public void SendEmail(string[] recipientList, string subject, string message);
public int LookUpContactPhoneNumber(string contactName);
public void SyncWithComputer();
}
Run Code Online (Sandbox Code Playgroud)
实现:
public class Phone : IPhone
{
public void MakeCall(int phoneNumber) { // implementation }
public void AnswerCall() { // implementation }
public void HangUp() { // implementation }
}
public class Pda : IPda
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用Enterprise Architect 从此模式生成业务对象.
该架构具有以下枚举规范:
<xs:simpleType name="PackageMedium">
<xs:restriction base="xs:string">
<xs:enumeration value="NTP"/>
<xs:enumeration value="DAT"/>
<xs:enumeration value="Exabyte"/>
<xs:enumeration value="CD-ROM"/>
<xs:enumeration value="DLT"/>
<xs:enumeration value="D1"/>
<xs:enumeration value="DVD"/>
<xs:enumeration value="BD"/>
<xs:enumeration value="LTO"/>
<xs:enumeration value="LTO2"/>
<xs:enumeration value="LTO4"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
企业架构师生成以下代码,但Visual Studio不喜欢CD-ROM中的破折号( - ),也不会编译.
public enum PackageMedium : int {
NTP,
DAT,
Exabyte,
CD-ROM,
DLT,
D1,
DVD,
BD,
LTO,
LTO2,
LTO4
}
Run Code Online (Sandbox Code Playgroud)
我能做些什么来完成这项工作?
基于@Craig Stuntz回答我能找到这篇文章,帮助我从Enum中检索这些特殊字符.
现在使用什么酷孩子来轻松解析/生成/发布REST API?我看了一下Swagger它看起来不错,但从我的观点来看,它不适合Ruby.也许我错了,我错过了什么,帮助将不胜感激.
在输入多行注释时,当我按下回车键时,Visual Studio用于为注释的每个新行添加一个自动星号(显然2015年不再这样做了).我真的很喜欢这个.截至目前,如果我输入"/*"并输入,Visual Studio根本不会尝试自动完成它.事实上,它甚至让我也结束了评论"*/",而不是为我做这件事.所以我的问题是:是否还有其他人遇到这种情况?如何恢复原始功能,因此每个新行自动以星号为前缀,并为我关闭"*/"?
我已经检查过,是的,我的环境设置被设置为C#,是的,确实在我的设置中选中了"为///生成XML文档注释"选项.
我最近正在做一些PHP工作,在我看过的所有代码中,人们倾向于使用很少的方法.(他们也倾向于使用很少的变量,但这是另一个问题.)我想知道为什么会这样,我发现这个音符"一个带有一个参数的函数调用和一个空函数体大约需要7-8美元一样的时间localVar的++操作.类似的方法调用当然是约$ 15 localVar的操作++" 在这里.
这是真的吗,即使PHP页面已被编译和缓存?我应该尽可能避免使用方法来提高效率吗?我喜欢用重复代码块的方法编写组织良好,人类可读的代码.如果有必要在没有方法的情况下编写平面代码,是否有任何程序可以"内联"方法体?这样我就可以编写漂亮的代码,然后在部署之前将其弄糟.
顺便说一句,我一直在看的代码来自Joomla 1.5核心和几个WordPress插件,所以我认为他们是知道他们在做什么的人.
注意:我很高兴每个人都跳过这个问题来谈论一般的优化,但事实上我们正在谈论解释语言的优化.至少有一些暗示我们谈论PHP的事实会很好.
用生成的Java源代码,比如
所有生成的类都是"值对象"类型,没有业务逻辑.如果我向生成的源代码添加方法,如果我重复生成源代码,我将松开这些方法.
这些Java代码生成工具是否提供了"扩展"生成代码的方法?
例如,
我已经看到了几个关于使用XML Schema生成类的问题的问题xsd.exe,以及如何预先处理模式(通常使用XSLT)来解决生成之前的一些棘手方面的建议.我的问题是,是否可以构建一个100%符合XML Schema的C#代码生成器.问题xsd.exe仅仅是它的实现问题,还是它们指向XML Schema和C#之间的根本不一致?
特别是,我对如何将XML Schema中的概念映射到C#感兴趣 - 什么是可接受的映射,哪些映射是有争议的,是否存在本质上不可映射的XML Schema构造,是否存在未充分利用的C#构造?是否存在可提供映射规则的合规性规范,以便可以实施和测试?
编辑:为了清楚起见,我完全清楚XML Schema不会为我提供完全实现的C#接口,我对它是否可以完全映射到C#类层次结构感兴趣.
编辑2:我添加了一笔小额奖金,因为我有兴趣获得更多细节.
编辑3:赏金仍然开放,但到目前为止走向stakx - 一个很好的答案,但主要是处理如何在XML Schema中复制C#结构,而不是相反.虽然输入很好.
当我使用原型表视图时,我总是必须遵守协议TableViewDataSource.我总是忘记我需要实现哪些方法,所以我每次都要查看协议的来源.这非常耗时.
我认为Xcode必须具有自动为您实现所需方法的功能,对吧?就像IntelliJ IDEA,Eclipse和Visual Studio一样.
我想知道在哪里可以找到此功能.如果没有,是否有解决方法?至少我不必在每次符合协议时打开协议的源代码.
如果你不明白我的意思,这里有一些代码:
我有一个协议
protocol Hello {
func doStuff ()
}
Run Code Online (Sandbox Code Playgroud)
当我遵守它时,
class MyClass: Hello {
}
Run Code Online (Sandbox Code Playgroud)
我经常不记得我需要实现的方法的名称.如果Xcode有一个功能可以将上面的代码转换为:
class MyClass: Hello {
func doStuff () {
code
}
}
Run Code Online (Sandbox Code Playgroud)
现在你明白我的意思了吗?我只想问哪里可以找到这样的功能.