mscorlib绝对是.net基类库之一,C#中的每个程序都依赖它,但它代表什么?
在ECMA的C#语言规范标准中,这个词被提到了4次,并没有提到它的含义.
我作为C#开发人员度过了我的职业生涯.作为一名学生,我偶尔使用C但没有深入研究它的编译模型.最近我跳上了潮流,开始研究Objective-C.我的第一步只让我意识到我先前存在的知识中的漏洞.
根据我的研究,C/C++/ObjC编译需要预先声明所有遇到的符号.我也理解建筑是一个两步的过程.首先,将每个单独的源文件编译为单个目标文件.这些目标文件可能具有未定义的"符号"(通常对应于头文件中声明的标识符).其次,将目标文件链接在一起以形成最终输出.这是一个非常高级的解释,但它足以满足我的好奇心.但是我也希望对C#构建过程有类似的高级理解.
问: C#构建过程如何解决头文件的需求?我想也许编译步骤可以进行两遍?
(编辑:此处跟进问题)在使用库时C/C++/Objective-C与C#的比较如何?)
在我的日常工作中(我正在使用MS Windows),我保持我的git bash(实际上使用console2)开放一整天.我也经常安装我想使用git的新驱动器.但是我注意到我需要退出bash并再次打开它以使其识别新的驱动器号.
在git bash中是否有任何"注册"已安装驱动器的命令?谢谢
edit2:我没有任何选择在我自己的问题下留下评论(很奇怪......?),所以我在这里发布:
$ mount -a
sh.exe": mount: command not found
Run Code Online (Sandbox Code Playgroud) 该using关键字有三种不同的含义:
文档调用前两个定义指令(我猜这意味着它们本质上是预处理),而最后一个是语句.
无论它们的语法是否有区别,为什么语言开发人员会通过附加三个不同的含义来复杂化关键字的语义?例如,(免责声明:在我的头顶,可能肯定有更好的例子)为什么不添加像alias和的关键字import?技术,理论或历史原因?关键字配额?;-)
受控样本:
import System.Timers;
alias LiteTimer=System.Threading.Timer;
alias WinForms=System.Windows.Forms;
public class Sample {
public void Action() {
var elapsed = false;
using(var t = new LiteTimer.Timer(_ => elapsed = true) {
while (!elapsed) CallSomeFinickyApi();
}
}
}
Run Code Online (Sandbox Code Playgroud)
"使用"是一个模糊的词.
我正在使用Eclipse来编辑JavaScript文件,我想我"做错了".给定以下代码,其中
»表示一个选项卡,
·表示一个空格,并
|表示游标:
function·foo()·{
» var·baz·=·[|
}
Run Code Online (Sandbox Code Playgroud)
如果我在这一点上输入,我得到了
function·foo()·{
» var·baz·=·[
» ···········|
}
Run Code Online (Sandbox Code Playgroud)
呸.我宁愿得到
function·foo()·{
» var·baz·=·[
» » |
}
Run Code Online (Sandbox Code Playgroud)
我已经挖掘了各种"打字"和"格式化程序"首选项,但没有成功.我忽略了什么吗?或者是否有一个特殊的咒语,我必须吟唱或拼写我可以在Eclipse上施放,以使其表现如此?谢谢.
我有一个应用程序,需要每秒检查一次网站提要.
有时,对服务器的请求超过一秒钟.在这种情况下,应用程序需要等到第一个请求完成,然后立即启动新请求.我怎么能实现这个?
此外,请求不应冻结GUI.
病态的好奇心.说我有这种层次结构:
class Base {
public virtual int Field { get; set; }
}
class Derived : Base {
int _field;
public override int Field { get { return _field; } set { _field = value; } }
}
Run Code Online (Sandbox Code Playgroud)
如果我实例化Base,编译器将神奇地为Field属性创建一个支持字段.
因此,Derived如果没有引用基本实现,那么在Derived实例化时是否会创建支持字段?这是在C#规范中指定的,还是留给编译器实现?
更新
事实证明,规范确实特别声明自动实现的属性是使用"隐藏的支持字段"实现的.(第10.7.3节)我的具体问题没有任何说法.假设"隐藏"一词指的是new关键字提供的相同成员隐藏功能,我必须得出结论,无论使用什么,始终都会创建支持字段.
我想一个相关的问题可能是"是否为永远不会访问的自动实现的属性创建了支持字段?" 相同的基本论点,相同的结论.
据我了解,UnitOfWork类旨在表示域中业务事务的概念.它并不直接表示数据库事务,这只是一个可能的实现的细节.
问:那么为什么关于工作单元模式的大量文档会引用"提交"和"回滚"方法?
这些概念对域或域专家毫无意义.业务事务可以"完成",因此UnitOfWork应该提供"完整"方法.同样,它不应该被建模为"清除"而不是"回滚"方法吗?
更新:
答:以下两个答案都是正确的.它们是UoW的两种变体:对象注册和呼叫者注册.在对象注册中,Rollback用于撤消对所有内存中对象的更改.在调用者注册中,Rollback用于清除所有记录的更改,以便后续调用Commit将不执行任何操作.
abstraction domain-driven-design unit-of-work separation-of-concerns
我在SQL Server 2005上有几个存储过程,我注意到从我在四个服务器的IIS6 Web场中运行的ASP.NET MVC应用程序调用时,会突然花费很长时间才能完成.正常,预期执行时间不到一秒; 意外的异常执行时间为25-45秒.这个问题似乎永远无法纠正.
但是,如果我更改存储过程(即使我没有在过程中更改任何内容,除了可能为SSMS修改命令创建的脚本添加空格),完成时间将恢复为预期的完成时间.
IIS和SQL Server在不同的盒子上运行,两者都运行Windows Server 2003 R2 Enterprise Edition.SQL Server是标准版.所有机器都配备双Xeon E5450 3GHz CPU和4GB RAM.使用TCP/IP协议通过千兆以太网访问SQL Server(不确定是什么物理介质).
Web场中的所有Web服务器都存在此问题.当我从开发机器上的SSMS中的查询窗口调用该过程时,该过程在正常时间完成.这很奇怪,因为我认为SSMS使用与.NET中相同的SqlClient驱动程序.当我将Web应用程序的开发实例指向生产数据库时,我再次得到异常长的完成时间.如果我的SqlCommand超时太短,我明白了
System.Data.SqlClient.SqlException:超时已过期.操作完成之前经过的超时时间或服务器没有响应.
问题:为什么在存储过程中执行ALTER而不实际更改其中的任何内容,将完成时间恢复到不到一秒,如预期的那样?
编辑:为了澄清,当应用程序运行缓慢时,它同时在SSMS中使用相同的参数运行良好.我能辨别的唯一区别是登录凭证(下次我注意到行为时,我将使用相同的信用卡从SSMS检查).最终目标是使过程以预期的速度持续运行,而无需偶尔进行干预.
解决方案:我想更新此问题以防其他人遇到此问题.根据以下答案的引导,我能够始终如一地重现这种行为.为了测试,我利用sp_recompile并传递了一个敏感的sprocs.然后,我从我的浏览器发起一个网站请求,该请求将使用非典型参数调用sproc.最后,我向一个页面发起网站请求,该页面使用典型参数调用sproc,并观察由于sproc调用上的SQL超时而导致请求未完成.
要在SQL Server 2005上解决此问题,我已经OPTIMIZE FOR为我添加了提示SELECT.易受攻击的sprocs都具有本文中描述的"一体化"模式.这种模式肯定不理想,但考虑到项目的时间表,这是必要的权衡.
Response.Redirect在坚持正确的层分离的同时,在模型 - 视图 - 展示器模式中调用a的最佳方法是什么?
这与 Web 部署和/或 Web 部署项目有关(不确定它们之间的关系是什么)。只是对组成任务感到好奇,我可以将其重新组合成自定义包目标。
说我有以下层次结构:
public class MyClass
{
protected virtual void Method() { ... }
}
public class MySubClass : MyClass
{
public new virtual void Method() { ... }
}
public class MySubSubClass : MySubClass
{
// how do I reference the protected Method() to override it?
}
Run Code Online (Sandbox Code Playgroud)
是否可以覆盖protectedMethod()的实现,以便将MyClass中定义的其他方法的调用分派给MySubSubClass中的实现?
如果不可能,那么为什么开悟是很好的.
这个问题基于前一个问题:C#编译如何解决需要头文件的问题?.
确认C#编译使用多个通道基本上回答了我原来的问题.此外,答案表明C#使用存储在程序集中的类型和方法签名元数据来在编译时检查代码语法.
问: C/C++/Objective-C如何知道在编译时链接的运行时加载哪些代码?并将其与我熟悉的技术联系起来,C#/ CLR如何做到这一点?
如果我错了,请纠正我,但对于C#/ CLR,我的直观理解是在执行时检查某些路径的程序集,并且基本上所有代码都在运行时动态加载和链接.
编辑:更新为包含C++和Objective-C with C.
更新:为了澄清,我真正感到好奇的是C/C++/Objective-C编译如何匹配源代码中的"外部定义"符号与该代码的实际实现,编译输出是什么,以及编译的基本方式输出由微处理器执行,以将控制无缝地传递到库代码中(就指令指针而言).我已经使用CLR虚拟机完成了这项工作,但我很想知道在实际的微处理器上如何在C++/Objective-C中概念性地工作.
c# ×7
.net ×4
c ×2
clr ×2
abstraction ×1
asp.net ×1
bash ×1
c#-3.0 ×1
drive ×1
eclipse ×1
git ×1
indentation ×1
inheritance ×1
javascript ×1
mount ×1
msbuild ×1
mvp ×1
oop ×1
overriding ×1
package ×1
performance ×1
redirect ×1
sql-server ×1
unit-of-work ×1
windows ×1
wpf ×1