我对学习C#(来自Java和C++背景)相当新,我对手动垃圾处理有疑问:是否有可能手动销毁C#中的对象?我知道IDisposable接口,但是假设我正在处理一个我没写过的类而且它没有实现它?它不会有一个.Dispose()方法,使和using { }超出,并且.Finalize始终为protected还是private这样,要么是不是一种选择.
(我只是想了解什么是可能在C#在这种情况下,我想,如果一切都失败了,我可以继承的假设ImNotDisposable类,以便它不实现IDisposable.)
我们正在努力将程序集暴露给COM.
除此之外,我们频率使用可空值,例如long?,DateTime?等.这些是泛型类型,不能暴露给COM.
什么是COM的这些数据类型的良好替代品?
我们尝试过以下方法:
//Original CustomerID property in class
public long? CustomerID
{
get;
set;
}
//Explicit COM interface
long IComInterface.CustomerID
{
get { return CustomerID.GetValueOrDefault(); }
set { CustomerID = value; }
}
Run Code Online (Sandbox Code Playgroud)
问题是,我们需要一种通过COM来回传递"null"的方法.使用-1或0之类的数字将不起作用,因为它们也是有效值.
我们不得不使用nullables b/c这些最初来自我们的数据库模式.
而不是仅仅编写一个名为import()的新函数,我想知道是否有更好的解决方案.否则require_once将仅包含在import()的范围内,这对于那里的任何"全局"变量都是不利的.
我的import()函数与require_once的工作方式不同,但用途相同(增强的可用性).
我需要一个数组,数组中的每个项都是这样的字节数组,但我不知道如何做:
Dim xx as array
xx(0) *as byte* = {&H12, &HFF}
xx(1) *as byte* = {&H45, &HFE}
Run Code Online (Sandbox Code Playgroud) 所以我正在构建一个必然会使C++工作的应用程序,但是MFC/ATL对我来说太乱了,所以我有一个很好的想法,就是用本机C++中的所有"思考"代码和C#中所有漂亮的UI代码.但问题是两者之间的互操作性.在我对此过于沉溺之前,我想知道这是否是一个已解决的问题,并且有一个非常好的方法来做到这一点.请注意,我不想在同一模块中混合使用逻辑和显示,因为它会产生恼人的高耦合.
这是我到目前为止所拥有的:

那么告诉我,它可以做得更好吗?
如果我理解正确,typeid可以确定多态中的实际类型,而typeof则不能.
它们的返回用于不同的目的也是如此:typeof的返回用作可以定义变量的类型关键字,但是typeid的返回不能?
有没有办法同时获取多态的实际类型并使用return as type关键字来定义另一个变量?我希望从指向基类的指针获取派生类类型,并定义一个变量或指向派生类的指针.就像是:
baseclass *p = new derivedclass
typexxx(*p) *pp = dynamic_cast<typexxx(*p) *> (p);
// would like to convert the pointer from pointing to a base class
// to its derived class
Run Code Online (Sandbox Code Playgroud)
非常感谢你!
我有一个TFS服务器,里面有4个团队项目.我想将一个团队项目的文件夹复制到另一个团队项目中.这是树 -
TFS(Server)
|_ A1(Team project1)
|_ A2(Team project2)
|______(Folder1)
|______(Folder2)
|______(Folder3)
|______(Folder4)
|_ A3(Team project3)
|_ A4(Team project4)
Run Code Online (Sandbox Code Playgroud)
我想将A2(TeamProject2) - >(Folder2)中的文件夹仅复制到A1(Team Project1)我该怎么做?
从我的(半)交互式期望脚本退出后,我想清除屏幕(在本地机器上)。我可以从脚本中做到这一点吗?这是我尝试过的,失败了。
#!/usr/bin/expect -f
set env(TERM) vt100
spawn ssh -Y username@domain
set user username
set pass password
#login sequence
expect "password: "
send "${pass}\r"
sleep .5
#some menu commands to enter ERP....
#...
#...
set CTRLZ \032
set CTRLC \003
set CTRLA \001
#don't time out
set timeout -1
interact {
-reset $CTRLZ {exec kill -STOP [pid]}
$CTRLA {
exp_send "menucmd...\ry\r"
}
$CTRLC {
#clear the host machine screen???
exec clear
exit
}
~~
}
Run Code Online (Sandbox Code Playgroud)
在远程端,我不在 shell 中,而是在 ERP 程序中。如果有必要,我可以退出到 shell,然后在远程主机上执行“清除”操作,但我认为远程主机提示仍会出现在屏幕上。 …
如何在不使用临时变量的情况下快速完成此操作?有内置功能吗?
编辑:谢谢你们的答案.看起来我需要澄清我的问题,但大多数情况下你们假设正确:有两个文件,文件名名称相反.
我希望将文件A命名为A-name.file,将文件B命名为B-name.file.
我同意,情况不会经常发生,但它只是发生在我身上,我想快速解决.
我有一个托管在Windows机器上的网页,我需要确保每天至少加载一次.我目前的计划是创建一个打开Internet Explorer并点击URL的计划任务:
"C:\Program Files\Internet Explorer\iexplore.exe" myurl.com/script_to_run_daily.aspx
Run Code Online (Sandbox Code Playgroud)
这很简单,设置和工作正常,但它让我感到非常黑客,因为Internet Explorer实际上必须打开并点击此URL.我不需要从此页面返回任何输入,它只是在文件被点击时将缓存数据存储在文件中.
这样做有一种更明智的方式吗?万一重要,这是一个VB.net网站.
提前致谢!