我有以下代码:
public void Test(IMyInterface iInterface)
{
iInterface.CallMethod ( );
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.但是,如果我将代码更改为线程:
private IMyInterface myInterface;
public void Test(IMyInterface iInterface)
{
myInterface = iInterface;
new Thread ( new ThreadStart ( CallInterfaceMethod) ).Start ( );
}
public void CallInterfaceMethod ( )
{
myInterface.CallMethod ( )
}
Run Code Online (Sandbox Code Playgroud)
当我使用线程时,我收到异常:
无法将"System .__ ComObject"类型的COM对象强制转换为接口类型"IMyInterface".此操作失败,因为对于具有IID"{GUID}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口
但是应该支持接口就好了吗?有人对这里发生的事情有任何想法吗?
1)声明变量的政策是什么?你应该总是使用关键字private,还是可以跳过它?
string MyVar1;
Run Code Online (Sandbox Code Playgroud)
与
private string MyVar1;
Run Code Online (Sandbox Code Playgroud)
我看到的唯一原因是Microsoft有一天可以更改默认访问修饰符public而不是private.
在哪里说私人是可选的?对MSDN的任何引用?
2)常量的命名策略?
在写一个常量时我总是使用大写字母,但是一位朋友告诉我这违反了微软的命名政策,是吗?
const string MYVAR1;
Run Code Online (Sandbox Code Playgroud)
VS
const string myVar1;
Run Code Online (Sandbox Code Playgroud)
3)Pascal还是Camel?
我个人认为骆驼看起来很丑陋.
我可以很好地更新一些表,但我的ASP.NET应用程序或SQLPLUS无法更新我拥有的某个表.两者都无限期地挂起.我必须强行退出SQLPLUS.我在运行以下内容的标准OracleCommand对象中都有更新语句:
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
但我也有asp:SqlDataSources绑定到GridView.似乎没什么用.
这里有一个类似的问题:Oracle Update挂起.我粗略地认为某些东西必须在这张桌子上有某种锁,但我不知道如何删除它甚至找不到它.任何帮助将不胜感激.
我正在运行Oracle 9i EE 9.2.
我正在努力学习如何进行单元测试和模拟.我理解TDD和基本测试的一些原理.但是,我正在考虑重构下面的代码,这些代码是在没有测试的情况下编写的,并且我试图了解它是如何更改以使其可测试的.
public class AgentRepository
{
public Agent Select(int agentId)
{
Agent tmp = null;
using (IDataReader agentInformation = GetAgentFromDatabase(agentId))
{
if (agentInformation.Read())
{
tmp = new Agent();
tmp.AgentId = int.Parse(agentInformation["AgentId"].ToString());
tmp.FirstName = agentInformation["FirstName"].ToString();
tmp.LastName = agentInformation["LastName"].ToString();
tmp.Address1 = agentInformation["Address1"].ToString();
tmp.Address2 = agentInformation["Address2"].ToString();
tmp.City = agentInformation["City"].ToString();
tmp.State = agentInformation["State"].ToString();
tmp.PostalCode = agentInformation["PostalCode"].ToString();
tmp.PhoneNumber = agentInformation["PhoneNumber"].ToString();
}
}
return tmp;
}
private IDataReader GetAgentFromDatabase(int agentId)
{
SqlCommand cmd = new SqlCommand("SelectAgentById");
cmd.CommandType = CommandType.StoredProcedure;
SqlDatabase sqlDb = new SqlDatabase("MyConnectionString");
sqlDb.AddInParameter(cmd, "AgentId", DbType.Int32, …Run Code Online (Sandbox Code Playgroud) Connection Lifetime=0连接字符串到底意味着什么?
很容易Applications为/Applications每个Mac上的DMG中的文件夹添加别名.但是是否可以在用户的Documents文件夹中添加别名,其中Documents文件夹的每个用户具有不同的路径?我尝试添加一个别名~/Documents,但它成了一个别名/Users/andyb/Documents,显然不适用于任何其他人的机器.
想要current datetime插入lastModifiedTime列.我正在使用MySQL数据库.我的问题是:
SQL中是否有可用的功能?要么
它是实现依赖所以每个数据库都有自己的功能吗?
MySQL中可用的功能是什么?
我有一个通用的方法,如:
public T GetLevelElement<T>(string name) where T : ILevelElement
{
//[...]
}
Run Code Online (Sandbox Code Playgroud)
这基本上在db中执行查找,在某些情况下它不会(并且不能返回)结果,我想返回null.
然而,这显然是不可能的,因为' T和null之间没有隐式转换 '.在这种情况下我该怎么办?
我正在生成一个csv文件,其中包含指向特定文件的链接.看起来像:
d:\ ABC,d:\ XXX ..
d:\ FGT\a.txt中,d:\ YXZ ..
.
.
现在,当在excel中打开它时,我希望将它们转换为超链接,以便用户单击它们并打开相应的文件或文件夹.有什么方法可以让excel将它识别为链接并使它们成为可点击的链接.excel中的一个简单的一两步就可以做到这一点?
谢谢...
我已经构建了一个控制台应用程序,它引用了我们构建的另一个DLL的版本4.3.2.1.
它运作良好并完成了它的工作.
然后构建了DLL的4.3.2.2版本,并且控制台应用程序开始死亡,因为它想看4.3.2.1.
有没有办法告诉控制台应用程序使用4.3.2.1或更高版本?4.3.2.1中存在的方法也存在于4.3.2.2中,并且将存在于dll的所有后续版本中.