TypeInfo(Type)返回有关指定类型的信息,有没有办法知道var的typeinfo?
var
S: string;
Instance: IObjectType;
Obj: TDBGrid;
Info: PTypeInfo;
begin
Info:= TypeInfo(S);
Info:= TypeInfo(Instance);
Info:= TypeInfo(Obj);
end
Run Code Online (Sandbox Code Playgroud)
此代码返回:
[DCC错误] Unit1.pas(354):E2133 TYPEINFO标准函数需要类型标识符
我知道非实例化的var只是一个指针地址.在编译时,编译器解析并执行类型安全检查.
在运行时,有没有办法知道更多关于var,只传递其地址?
有时在显示日历时,有必要阻止周末日期和日期标题中的周末名称显示,有没有办法使用ASP.NET日历控件执行此操作?
我希望能够从Oracle 9i数据库中检索子程序,函数,包规范和包体的模式信息,以便我可以使用系统中的类将它们呈现给C#客户端中的用户. Data.OracleClient命名空间.
到目前为止,我已经能够以比Java应用程序更快的速度显示高级模式数据,但是包和函数是我无法掌握的.我可以以非常有用的方式显示列,它们的类型,索引,表级和列级注释以及各种非常有用的信息.现在,如果我能够完成程序.
我正在尝试优化我编写的可排序表.瓶颈在于dom操纵.我正在创建新的表行,并在每次排序表时插入它们.我想知道我是否可以通过简单的重新排列行来加快速度,而不是重新创建节点.为了使这一点产生重大影响,dom节点重新排列必须比节点创建更快捷.是这样的吗?谢谢,-Morgan
我有一个程序,有时会从指针算术中发生段错误.我知道这种情况会发生,但是我不能提前检查它是否是段错误 - 要么我可以"预扫描"输入数据以查看它是否会导致段错误(这是无法确定的),或者我可以修改它不使用指针算法,这将需要大量的工作,或者我可以尝试捕获段错误.所以我的问题:
1)如何在C中捕获段错误?我知道操作系统中的某些内容会导致段错误,但是C程序可以做的事情是,如果它会比仅仅更优雅地使用段错误而死掉它们Segmentation fault?
2)这有多便携?
我想这是一个非常不可移植的行为,所以如果你发布任何代码来捕获段错误,请告诉我它的工作原理.我在Mac OS X上,但我希望我的程序可以在尽可能多的平台上工作,我想知道我的选择是什么.
并且不用担心 - 基本上我想要做的就是打印一个更加用户友好的错误消息并释放一些malloc()内存,然后死掉.我不打算只是忽略我得到的所有段错误并继续前进.
问题:我正在寻找的是使用Indy 10中的IdTCPClient使用单独线程接收数据的最典型或最佳实践方法.
背景:下面的代码是为了清楚起见我要删除的实际数据处理部分的示例.线程的想法是接收所有数据(变量大小,标头声明消息长度的其余部分)然后解析它(这就是HandleData过程的作用)并根据命令触发事件处理程序.
TIdIOHandlerSocket由主应用程序传递给线程,主应用程序也在需要时将数据写入套接字.
TScktReceiveThread = class(TThread)
private
{ Private declarations }
procedure HandleData;
protected
procedure Execute; override;
public
FSocket: TIdIOHandlerSocket;
constructor Create(CreateSuspended: boolean);
end;
procedure TScktReceiveThread.Execute;
var
FixedHeader: TBytes;
begin
Assert(FSocket <> nil, 'You must assign the connected socket to the receiving thread');
SetLength(FixedHeader, 2);
while not Terminated do
begin
if not FSocket.Connected then
Suspend
else
begin
FSocket.CheckForDataOnSource(10);
if not FSocket.InputBufferIsEmpty then
begin
FSocket.ReadBytes(FixedHeader, SizeOf(FixedHeader), false);
// Removed the rest of the reading and parsing …Run Code Online (Sandbox Code Playgroud) 假设我有这样一个类:
public sealed class Foo
{
public void Bar
{
// Do Bar Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我想扩展它以添加超出扩展方法可以做的事情....我唯一的选择是组合:
public class SuperFoo
{
private Foo _internalFoo;
public SuperFoo()
{
_internalFoo = new Foo();
}
public void Bar()
{
_internalFoo.Bar();
}
public void Baz()
{
// Do Baz Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它还有很多工作......但是我仍遇到一个问题:
public void AcceptsAFoo(Foo a)
Run Code Online (Sandbox Code Playgroud)
我可以在这里传递一个Foo,但不是超级Foo,因为C#不知道SuperFoo确实符合Liskov替换意义......这意味着我的扩展类通过组合使用非常有限.
因此,解决它的唯一方法是希望原始的API设计者留下一个界面:
public interface IFoo
{
public Bar();
}
public sealed class Foo : IFoo
{
// etc
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以在SuperFoo上实现IFoo(因为SuperFoo已经实现了Foo,只需要更改签名).
public class SuperFoo : IFoo
Run Code Online (Sandbox Code Playgroud)
在完美的世界中,消耗Foo的方法将消耗IFoo:
public …Run Code Online (Sandbox Code Playgroud) 当您有一个包含项目列表的对象时,如何管理这个简单的场景.例如:
public class ContainerObject
{
IList<ChildObject> Children { get; }
public void AddCustom(ChildObject toAdd)
{
// Some validation ...
Children.Add(toAdd);
}
}
Run Code Online (Sandbox Code Playgroud)
假设集合初始化为IList的实现,是否有任何方法可以控制项目添加到列表的方式?
例如,我在ContainerObject类上有另一个方法,它接受一个ChildObject并将其添加到列表中.在添加之前,需要此方法对ChildObject执行一些基本验证.
我很懒,因为我不想乱搞并编写一个消费开发人员需要实现的自定义列表界面(没有添加方法).我也在IQueryable接口上使用ToList()方法,所以这是坚持IList的另一个原因 - 它只是起作用.
那么,有没有一种方法可以监控项目如何添加到IList实例,即阻止使用Add方法,只允许通过我的自定义方法添加到集合中,或者我只是要求不可能的?......而且很懒:(
我可以想到一些hacky方法来检查何时通过我的自定义方法或直接在列表中添加项目但这些看起来很糟糕!
有人遇到类似的东西吗?如果是这样,你做了什么?
我有一个HTML页面,其中一些文本跨度标记为这样:
...
<span id="T2" class="Protein">p50</span>
...
<span id="T3" class="Protein">p65</span>
...
<span id="T34" ids="T2 T3" class="Positive_regulation">recruitment</span>
...
Run Code Online (Sandbox Code Playgroud)
即每个跨度都有一个ID,并通过其ID引用零个或多个跨度.
我想将这些引用可视化为箭头.
两个问题:
该解决方案应该在Firefox中工作,在其他浏览器中工作是一个加号,但不是真的必要.该解决方案可以使用jQuery或其他一些轻量级JavaScript库.
我可能错过了一些明显的东西,但我似乎无法让我的AJAX帖子连续运行而不是与jQuery同时运行.
ad_numbers 是一个数字ID数组.
$(ad_numbers).each(function() {
ad_number = $.trim(this);
if(!ad_number) { return true; }
$.post('/fetch.php', { ad_number: ad_number }, function(data, textStatus) {
$('#log').prepend('<p>' + data + '</p>');
});
});
Run Code Online (Sandbox Code Playgroud)
在fetch.php,我已经拥有它,sleep(2)所以我可以确保它正常工作.它似乎是在同时运行所有这些广告号,而不是等待第一个POST在继续执行数组中的下一个广告号之前完成.
我猜$.post()它在完成之前就回来了?避免这种情况的最佳方法是什么?
c# ×3
.net ×2
delphi ×2
javascript ×2
ajax ×1
architecture ×1
asp.net ×1
c ×1
calendar ×1
composition ×1
dom ×1
html ×1
indy ×1
jquery ×1
liskov-substitution-principle ×1
macos ×1
optimization ×1
oracle ×1
plsql ×1
post ×1
runtime ×1
sockets ×1
typeinfo ×1