之前已经提出过这个问题(问题编号308581),但是这个特定问题和答案有点特定于C++,并且很多东西与Java或C#等语言并不相关.
问题是,即使在重构之后,我发现我的源代码文件中有一些混乱.我的意思是,函数体是正常的,但我对函数本身的排序方式并不满意.当然,在像Visual Studio这样的IDE中,如果你记得它是如何被调用的话,找到一个成员是相对容易的,但情况并非总是如此.
我已经尝试了几种方法,比如首先放置公共方法,但这种方法的缺点是文件顶部的函数最终调用文件底部的其他私有函数,所以我最终滚动所有时间.
另一种方法是尝试将相关方法组合在一起(可能放入区域),但显然这有其局限性,好像在同一个类中有许多非相关方法,那么可能是时候将类分解为两个或更多个更小的类.
因此,请考虑以下事项:您的代码已经过适当重构,以满足Code Complete中提到的所有要求,但您仍然希望根据人体工程学目的对方法进行重新排序.你的方法是什么?
(实际上,虽然这不是一个技术问题,但这个问题确实让我感到很生气,所以如果有人能想出一个好的方法,我会非常感激)
假设我有一个这样的界面:
interface IAwesome
{
T DoSomething<T>();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用类型约束实现DoSomething方法?显然,这不起作用:
class IncrediblyAwesome<T> : IAwesome where T : PonyFactoryFactoryFacade
{
public T DoSomething()
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
这显然是行不通的,因为这个DoSomething()不能完全满足IAwesome的合同 - 它只适用于类型参数T的所有可能值的子集.有没有办法使这个工作缺少一些"铸造"黑魔法"(如果答案是否定的话,这就是我最后要做的事情)?
老实说,我不认为这是可能的,但我想知道你们的想法.
编辑:有问题的接口是System.Linq.IQueryProvider所以我无法修改接口本身.
我正在考虑发布一个用C#编写的类库作为开源.在此之前,我正在尝试进行一些重构,以满足一般公众的要求:)
我想知道什么是最好的命名空间架构?基本上,我看到以下选项:
现在已经有一些关于Stackoverflow的相关问题,比如这个和这个,但它们都没有真正回答我的问题.
有什么建议?
我的控制器中有一个用于HttpPost的创建操作.在该操作中,我在db中插入记录,然后返回一个指定不同操作名称的视图,因为我想将用户带到其他地方,例如他们刚创建的记录的详细信息视图,然后我传入当前模型,所以我不必重新加载他们刚刚输入的数据.不幸的是,地址栏中的网址仍然显示原始的创建操作.
[HttpPost]
public ActionResult Create(MyModel model)
{
//Insert record
...
//Go to details view, pass the current model
//instead of re-loading from database
return View("Details", model);
}
Run Code Online (Sandbox Code Playgroud)
如何让网址显示" http:// myapp/MyController/Details/1 ",而不是" http:// myapp/MyController/Create/1 "?是可能的,还是我必须进行重定向?我希望我可以避免重定向......
我正在尝试在我的C应用程序中嵌入一个Python(2.7)库,我正在使用Python/C API从C调用Python代码.我需要调用一个接受关键字参数的Python方法.在语义上,我正在尝试在Python中实现以下行的等价物:
myobject.dosomething('blahdy blah', somearg=True)
Run Code Online (Sandbox Code Playgroud)
通过阅读文档,我已设法获得以下内容,但这不会传递关键字参数:
PyObject_CallMethod(myobject, "dosomething", "s", "blahdy blah");
Run Code Online (Sandbox Code Playgroud)
我对Python并不是很熟悉,因为文档在这方面并不完全清楚,而且谷歌搜索也没有提供太多有用的信息.我很感激任何帮助.
我有一个旧版应用程序,它从文件描述符3的客户端程序中读取消息。这是一个外部应用程序,因此无法更改。客户端是用C#编写的。我们如何在C#中打开到特定文件描述符的连接?我们可以使用AnonymousPipeClientStream()之类的东西吗?但是,我们如何指定要连接的文件描述符?
我几天前决定学习(普通)Lisp,我意识到这是一个相当新的问题,对于至少有一点经验的人来说,这可能是非常微不足道的.
所以基本上发生的是我加载Emacs + Slime(通过盒子中的Lisp)并编写我的程序(包含在下面):
(defun last-char (s) "Get last character"
(char s (- (length s) 1)))
Run Code Online (Sandbox Code Playgroud)
然后我尝试编译它C - c M - k,但后来我收到以下警告:
CHAR既未声明也未绑定,它将被视为已声明为SPECIAL.
这个警告是什么意思?我想它可能类似于忘记C中的#includes,但我无法弄明白.我该怎么办呢?我只是简单地忽略它吗?
我正在尝试编写自己的玩具我的玩具语言 - > MSIL编译器,以便更好地理解编译器的工作原理.我得到了解析和lexing工作,我已经构建了表达式树并使用System.Linq.Expressions表达式树API,我有一个工作的解释器.现在我想发出一些真正的MSIL程序集.
问题是,我无法弄清楚如何实际构建这些程序集.该MethodBuilder类只接受原MSIL方法体,所以我必须让我的表达式树的原始MSIL.调用Expression.Compile()会返回一个工作委托但我无法获取其底层MSIL.调用MethodInfo.GetMethodBody()会抛出InvalidOperationException,因为它没有在该特定子类中实现.
如何将该委托链接到新程序集?
有没有办法让web.config文件的某些部分仅适用于单个文件(或目录,或一组文件等)
基本上我想将以下内容仅应用于应用程序中的单个页面,其余应使用默认设置:(它将上传大小限制为32M)
<system.web>
<httpRuntime maxRequestLength="32768" executionTimeout="360"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)
关键是我只希望该特定页面接受大文件.
直到最近,我还没有说过普通类和内部类/子类之间存在差异.
内部类的实例与其包含类的实例之间的关系是什么,内部类的目的/使它们与众不同的目的是什么?
c# ×4
.net ×3
asp.net ×1
asp.net-mvc ×1
cil ×1
common-lisp ×1
emacs ×1
generics ×1
interface ×1
lisp ×1
namespaces ×1
nested-class ×1
open-source ×1
pinvoke ×1
python ×1
python-2.7 ×1
python-c-api ×1
refactoring ×1
slime ×1
web-config ×1
winapi ×1