我应该在从TObject或TPersistent派生的类的构造函数中调用"inherited"吗?
constructor TMyObject.Create;
begin
inherited Create; // Delphi doc: Do not create instances of TPersistent. Use TPersistent as a base class when declaring objects that are not components, but that need to be saved to a stream or have their properties assigned to other objects.
VectorNames := TStringList.Create;
Clear;
end;
Run Code Online (Sandbox Code Playgroud) 为什么是这样?我觉得能够锁定一些扩展方法只能在我的一个类中使用它真的很棒.真的不想在任何地方都有某些扩展方法......而且它们看起来比常规静态方法好得多:P
为了澄清:
我想要这些扩展方法的原因是因为我正在扩展一个Form,它上面有一个DataGridView.而且我对这些行感到厌倦:
foreach(var row in grid.Rows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))
foreach(var row in grid.SelectedRows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))
Run Code Online (Sandbox Code Playgroud)
想要一个扩展方法,以便我可以做到
foreach(var row in grid.Rows.CheckedRows())
foreach(var row in grid.SelectedRows.CheckedRows())
Run Code Online (Sandbox Code Playgroud)
换句话说,这个扩展方法在这个类之外根本没用.但它会使代码更清洁.当然可以制定常规方法,这就是我最终做的事情,因为这是不可能的.
Aaanyways,我只是想知道是否有人有一些很好的论据,为什么他们选择在这里使用扩展方法创建这样的限制.必须在静态类中才有意义.不能在嵌套的静态类中不...至少对我来说......
我正在尝试创建一个钩子来监视鼠标光标的当前位置.没什么重要的,我只需要在界面设计中计算一些像素,并想学习如何创建一个钩子,所以我决定采用一种艰难的方式而不是一种理智的方式.
我找到了声明以下函数的示例代码:
<DllImport("User32.dll", CharSet:=CharSet.Auto, _
CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function SetWindowsHookEx _
(ByVal idHook As Integer, ByVal HookProc As CallBack, _
ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
End Function
Run Code Online (Sandbox Code Playgroud)
调用该函数时,使用以下代码:
hHook = SetWindowsHookEx(WH_MOUSE, _
hookproc, _
IntPtr.Zero, _
AppDomain.GetCurrentThreadId())
Run Code Online (Sandbox Code Playgroud)
但是Appdomain.GetCurrentThreadID生成警告:"'公共共享函数GetCurrentThreadId()As Integer'已过时:'AppDomain.GetCurrentThreadId已被弃用,因为当托管线程在光纤(又称轻量级线程)上运行时,它不提供稳定的Id.要获取托管线程的稳定标识符,请使用Thread上的ManagedThreadId属性."
我尝试过使用ManagedThreadID,但这不起作用.返回的线程ID似乎是线程的逻辑线程ID,因为它在.net运行时运行,而不是Win32线程标识符.
调用函数ith AppDomain.GetCurrentThreadID有效,但我真的想为我的线程提供一个"稳定的标识符".
有人可以向我解释是否可以在此上下文中使用ManagedThreadID(我假设不是),如果没有,我需要避免的事情是为了阻止AppDomain.CurrentThreadID变得"不稳定"?
干杯
我一直在谷歌搜索,我只是找不到一个简单的答案.它应该很简单,就像STL一般.
我想定义从std :: ostream公开继承的MyOStream.假设我想在每次将某些内容写入流中时调用foo().
class MyOStream : public ostream {
public:
...
private:
void foo() { ... }
}
Run Code Online (Sandbox Code Playgroud)
我知道ostream的公共接口是非虚拟的,那怎么办呢?我希望客户能够在MyOStream上使用operator <<和write()以及put()并使用我的类的扩展功能.
我在使用Ant构建项目时遇到了一些麻烦.我想看看eclipse用来构建我的项目的Ant脚本.我怎样才能做到这一点?
我试图在两种可能的实现之间做出决定,我渴望选择最好的一种:)
我需要向表中添加一个可选的BLOB字段,该表当前只有3个简单字段.据预测,新字段的使用率将低于10%,甚至可能低于5%,因此对于大多数行来说它将为空 - 事实上,我们的大多数客户可能永远不会有任何BLOB数据.
同事的第一个倾向是添加一个新表来保存BLOB,在第一个表中有一个(可为空的)外键.他预测在查询第一个表时会有性能优势.
我的想法是,将BLOB直接存储在原始表中更合乎逻辑,也更容易.我们的查询都没有SELECT *从该表中进行,因此我的直觉是直接存储它不会产生显着的性能开销.
我将对两种选择进行基准测试,但我希望一些SQL专家可以从经验中获得任何建议.
使用MSSQL和Oracle.
重置动作由调用函数执行input type="image"并onclick调用resetForm().
单击重置时,不应发生表单提交.我尝试从resetForm()函数返回false,但它仍然无法正常工作.请帮帮我.
我有一个容器,比如Grid.它有两个容器,比如StackPanels.
StackPanel#1有一些矩形.什么是让用户拖动矩形并将其放入StackPanel#2(并使该矩形成为StackPanel#2的子项)的最佳方法.
我有一个拖拽位 - 唯一不清楚的是是否实际使用容器或只是在直板上手动处理所有矩形.
c# ×2
.net ×1
ant ×1
blob ×1
controls ×1
delphi ×1
eclipse ×1
html ×1
inheritance ×1
java ×1
javascript ×1
jpeg ×1
jquery ×1
nested-class ×1
oracle ×1
ostream ×1
performance ×1
php ×1
sql-server ×1
stl ×1
vb.net ×1
winapi ×1
wpf ×1