在C#中,如果你有多个构造函数,你可以这样做:
public MyClass(Guid inputId, string inputName){
// do something
}
public MyClass(Guid inputId): this(inputId, "foo") {}
Run Code Online (Sandbox Code Playgroud)
这个想法当然是代码重用.但是,当需要一些复杂的逻辑时,最好的方法是什么?说我想要这个构造函数:
public MyClass(MyOtherClass inputObject)
{
Guid inputId = inputObject.ID;
MyThirdClass mc = inputObject.CreateHelper();
string inputText = mc.Text;
mc.Dispose();
// Need to call the main Constructor now with inputId and inputText
}
Run Code Online (Sandbox Code Playgroud)
这里需要说明的是,我需要创建一个对象具有使用后丢弃.(澄清:不是立即,但我必须调用Dispose()而不是等待垃圾收集)
但是,如果我在重载的构造函数中添加一些代码,我没有看到再次调用基础构造函数的方法.有没有办法从一个重载的内部调用基础构造函数?
或者是否可以使用
public MyClass(MyOtherClass inputObject): this(inputObject.ID,
inputObject.CreateHelper().Text)
{}
Run Code Online (Sandbox Code Playgroud)
这会自动从CreateHelper()中释放生成的对象吗?
编辑:谢谢到目前为止.两个问题:我不控制MyOtherClass,我没有扩展方法(只有.NET 3.0 ......).我确实控制了自己的类,因为我刚刚开始编写它,如果有一个好的方法,我没有问题重构构造函数.
我有一个非常慢的网站,使用它时"感觉"非常糟糕.服务器很好,这是一个客户端问题,我认为因为太多的JavaScript或图像请求,但由于它不是我自己的网站,我想知道是否有一种方法可以在IE中显示和分析页面.
在Firefox中,我会使用Firebug,Y!Slow和Web Developer扩展来查看所有JavaScript,CSS,图像和其他请求,AJAX请求等,但在IE上我没有看到任何问题.我知道我可以使用Firefox,但是这个页面在FF中比在IE中效果更好,所以我想知道在IE中是否有一些特定的开发插件.
编辑:感谢您提出的许多建议!选择一个作为"接受"的太多好答案,但我会看看建议的各种工具.
我有一个.net 3.5 WinForms应用程序在我的机器上运行正常,但在另一台机器上它会立即崩溃与system.io.fileloadexception.不幸的是,没有关于哪个文件无法加载的详细信息,所以我不知道问题究竟在哪里.
我相信我知道它可能是哪一个(SQL Server Compact版本),但在我漫无目的地捕获之前,我想知道是否有一种正确的方法来找出导致fileloadexception的原因,而不是使用来自SysInternals的FileMon.
唯一的错误消息是:
EventType clr20r3,P1 myapplication.exe,P2 2.1.0.0,P3 490eca78,P4 myapplication,P5 2.1.0.0,P6 490eca78,P7 2e,P8 21,P9 system.io.fileloadexception,P10 NIL.
如果我重写Equals和GetHashCode,我该如何决定要比较哪些字段?如果我有两个对象,每个对应两个字段会发生什么,但Equals只检查一个字段?
换句话说,假设我有这个类:
class EqualsTestClass
{
public string MyDescription { get; set; }
public int MyId { get; set; }
public override bool Equals(object obj)
{
EqualsTestClass eq = obj as EqualsTestClass;
if(eq == null) {
return false;
} else {
return MyId.Equals(eq.MyId);
}
}
public override int GetHashCode()
{
int hashcode = 23;
return (hashcode * 17) + MyId.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
如果它们具有相同的MyId,我认为两个对象相等.因此,如果Id相等但描述不同,它们仍然被认为是相等的.
我只是想知道这种方法的缺陷是什么?当然,像这样的结构将按预期运行:
List<EqualsTestClass> test = new List<EqualsTestClass>();
EqualsTestClass eq1 = new EqualsTestClass();
eq1.MyId = 1;
eq1.MyDescription = "Des1";
EqualsTestClass …Run Code Online (Sandbox Code Playgroud) 我有一个数据.目前,它是一个XML文件,但架构可能会发生变化.所以我们暂时假设它是一个C#类.
当我将数据存储在磁盘或数据库中时,我需要添加某种签名或指纹或校验和或其他任何内容,以确保没有人可以修改数据.警告:即使是有权访问所有源代码的管理员或开发人员也不应该修改它.
我假设由于具有完全代码访问权限的人可以轻松地创建新签名(签名需要以编程方式完成,因此无需手动密码短语输入),签名在某种程度上需要包含一些其他数据.理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串.
我的一般方法是使用对称加密.我从所有字段生成哈希,即SHA-512,然后使用哈希作为密码加密该哈希和我的附加数据以获取我的签名.要解密,我的函数会根据文件中的实际数据生成哈希值,并尝试解密签名.这不会是防篡改的,因为很容易生成签名日期和附加信息仍然完整的签名.
由于我不是该领域的专家,我相信我正在尝试重新发明轮子,而且它不是一个非常好的轮子.我只是想知道是否有一些标准方法?我相信我的部分请求是不可能的(毕竟,如果有人控制整个环境,那个人也会控制系统时间),但我仍然想知道这通常是如何解决的?
所以ASP.net MVC默认同时附带JQuery和ASP.net Ajax.虽然JQuery的用例很明显且很多,但我想知道ASP.net Ajax的意义是什么?如果我只是让我的控制器动作返回JSON,我不需要它吗?此外,任何"旧的"ASP.net控件只有在你使用Webforms视图引擎时才能工作(我想我想使用另一个,但这不是重点).
ASP.net Ajax在MVC环境中提供什么?
我现在正在玩SubSonic 3.0,它看起来非常简单(除了我还需要在SimpleRepository和ActiveRecord之间做出决定,但这是另一个故事).
但是,由于文档有点稀疏,我不确定它是否支持外部关系和延迟加载.基本上,我有一个课程发布:
public class Posting {
[SubSonicPrimaryKey]
public Guid InternalId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public DateTime? PostingDate { get; set; }
public List<Comment> Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一个评论:
public class Comment
{
public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如您所见,Posting有一个评论列表.我能以某种方式告诉SubSonic这两者是否相关?那就是我保存帖子时可以自动保存所有评论?更重要的是,当我加载一个帖子时,我希望评论列表最初是空的,并且在某些时候说"好的,请立即填充".
我知道我可以在Code中手动管理它,但我想知道SubSonic是否可以在我做手动工作之前做到这一点.
奇怪的问题,但一个让我困惑的问题.在我们有终端和DOS的过去,应用程序通常只有一个"窗口",这是一个全屏幕.当人们切换功能时,没有打开新窗口的概念,而是覆盖了主窗口的内容.所以只有一个主窗口,但是在其中呈现了多个屏幕.
如何在现代应用程序(WinForms或WPF)中创建类似的东西?
似乎有两种方法:
我想知道是否有更好的方法?基本上是"看,我不关心边框样式/图标或主菜单条等内容.我想要的就是将这个屏幕渲染到这个区域".有点像ASP.net主页,其中实际页面只定义被渲染到占位符的内容.
是否有一些适当的机制来做这样的事情?
或者整个方法有问题吗?
关于jQuery UI Dialog的一个好处是它有一个Buttons选项,可以自动正确定位它们.我只是想知道:我可以以某种方式在按钮旁放置元素吗?我有一个Ajax-Loader gif,我想在对话框的左下角显示,而按钮保持在右下方?
我知道我可以删除按钮并在HTML中手动创建它们,但由于jQuery已经为我提供了定位和样式,我想保留该功能,如果它有意义的话.
$("#newProjectDialog").dialog({
bgiframe: true,
resizable: false,
width: 400,
modal: true,
overlay: {
backgroundColor: '#000',
opacity: 0.5
},
buttons: {
'Create': function() {
$("#ajax-loader").show();
// Make the Ajax Call and whatever else is needed
$(this).dialog('destroy');
},
Cancel: function() {
$(this).dialog('destroy');
}
}
});
Run Code Online (Sandbox Code Playgroud) 我想为文件存储一些与应用程序相关的元数据,而NTFS备用数据流(AltDS)允许我将这些元数据直接存储在文件上,而不是存储在单独的数据库中.
我觉得这不是一个好主意.我知道这只适用于NTFS,但至少如果用户将文件复制/移动到非NTFS驱动器,他们会从Windows获得警告(是的,是的,没有人读警告,我知道) -
但是,在文件上存储其他数据可能会变得非常浪费,因为即使卸载了我的应用程序,AltDS也会保留.就像十年前人们使用"注册表清理工具"在卸载程序后从注册表中删除无用的条目,以使他们的系统运行得更快(当清理器清理得太多时不太稳定......).
我只是想知道它们可以合理地用于什么?它们应该完全留给Microsoft Apps使用吗?或者是否有某种类型的应用程序可以使用它们的某些共同策略(除了恶意软件)?
编辑:只是为了澄清我的想法.我正处于为自己编写小型文档管理系统的早期阶段.因为我想有自由移动文件,我想在文件上存储元数据,这样如果我移动/重命名/修改它们,我的应用程序仍然可以识别它们.它可以是整个元数据,也可以只是与单独数据库一起使用的GUID.
总结给出的要点:
优点:
缺点: