我有一个实现接口的项目列表.对于这个问题,让我们使用这个示例界面:
interface Person
{
void AgeAYear();
}
Run Code Online (Sandbox Code Playgroud)
有两个班
class NormalPerson : Person
{
int age = 0;
void AgeAYear()
{
age++;
//do some more stuff...
}
}
class ImmortalPerson : Person
{
void AgeAYear()
{
//do nothing...
}
}
Run Code Online (Sandbox Code Playgroud)
由于其他原因,我需要他们两个列表.但是对于这个调用,当我遍历我的Persons 列表时,我可能会调用空函数. 这会对性能产生影响吗?如果是这样,多少钱? 对于所有意图和目的,空函数是否会被优化掉?
注意:在实际示例中,ImmortalPerson还有其他具有代码的方法 - 它不仅仅是一个不执行任何操作的对象.
在C#中,如何确定是否Type可以实例化? 我试图避免Activator.CreateInstance异常.
我当前的方法是type.IsClass && !type.IsInterface,但我担心这可能会失败抽象类,等等.我也考虑过检查type.TypeInitializer == null,但我不确定这是否也是万无一失的.
找出a Type是否可实例化的最简单/最有效的方法是什么?
有没有办法通过C#应用程序的快捷方式运行应用程序?
我试图从我的C#应用程序运行.lnk.快捷方式包含大量参数,我更希望应用程序不必记住.
尝试通过Process.Start运行快捷方式会导致异常.
谢谢
编辑:
例外是"Win32Exception":"指定的可执行文件不是有效的Win32应用程序."
这是(缩写)代码:
ProcessStartInfo info = new ProcessStartInfo ( "example.lnk" );
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
info.RedirectStandardInput = true;
Process whatever = Process.Start( info );
Run Code Online (Sandbox Code Playgroud) 是否可以实现一个约束为两个唯一通用参数的类?
如果不是,那是因为它没有实现,还是因为语言结构(继承)是不可能的?
我想要一些形式:
class BidirectionalMap<T1,T2> where T1 != T2
{
...
}
Run Code Online (Sandbox Code Playgroud)
我正在实现双向字典.这主要是好奇心问题,而不是需要.
从评论中复述:
丹:"如果不满足这种约束,会有什么负面影响?"
我:"然后用户可以使用map [t1]和map [t2]进行索引.如果它们是相同的类型,则没有任何区别,也没有任何意义."
Dan:编译器实际上允许[两个泛型类型参数来定义不同的方法重载],所以我很好奇; 它是否随意选择其中一种方法来调用?
我试图通过从我的可执行文件(在这种情况下,.NET应用程序)中自动检索版本信息来删除应用程序发布过程中的另一个步骤.
到目前为止,我已经能够获得有限的NSIS知识,但我很快就知道这还不够.
第1步:在可执行文件中声明版本信息
在AssemblyInfo.cs中,我声明[assembly: AssemblyVersion("1.0.0.1")].这成功地使版本信息出现在已编译的可执行文件中(在"文件版本"和"产品版本"下).
第2步:从可执行文件中检索版本信息
根据关于"GetFileVersion"的这篇文章,导入"FileFunc.nsh"允许您从可执行文件中检索版本信息.
使用的代码:
Section
Var /GLOBAL version
${GetFileVersion} "C:\test.exe" $version
...
SectionEnd
Run Code Online (Sandbox Code Playgroud)
第3步:验证函数调用的内容
根据文档的5.1.7节,我应该能够在编译期间使用"!echo"命令打印到命令行.打印变量(或常量等)的内容之间的区别仍然让我困惑,所以我尝试了所有这四个选项:
!echo $version
!echo "$version"
!echo "${version}"
!echo ${version}
Run Code Online (Sandbox Code Playgroud)
这导致:
$version (InstallScript.nsi:15)
$version (InstallScript.nsi:16)
${version} (InstallScript.nsi:17)
${version} (InstallScript.nsi:18)
Run Code Online (Sandbox Code Playgroud)
第4步:声明安装程序元数据
根据4.8.3节,我应该可以通过VIProductVersion和添加安装程序元数据VIAddVersionKey.
VIProductVersion $version
VIAddVersionKey "FileVersion" "$version"
Run Code Online (Sandbox Code Playgroud)
在构建的安装程序中,这会将字符串"$ version"添加到指定的字段中.
ToString()在NSIS中是否有相同的东西?如何访问变量的内容?变量名的打印是否意味着它没有内容?如何验证是否GetFileVersion正确调用,正确执行并返回值?
我有一个实用功能,我怀疑它占用了应用程序执行时间的很大一部分.使用Time Profiler查看调用堆栈,此函数占用调用它的任何函数的大部分执行时间.但是,由于此实用程序功能是从许多不同的来源调用的,因此我无法确定总体而言,这是否是我的优化时间的最佳用途.
如何在程序执行期间查看在此函数中花费的总时间,无论是谁调用它?
为清楚起见,我想将所选条目与该函数的所有其他调用组合到一个条目中:

是否可以在winforms中实现可滚动、非多行、左对齐的tabcontrol?
如果可以通过所有者绘图实现这一点,那么在实现我自己的代码时是否有任何现有代码可以用作参考?
编辑: “左对齐”表示 tabControl 属性设置为:“Alignment=Left”(与从左到右相反)。
当我将UserControls添加到FlowLayoutPanel时,它们会正确显示.当我在添加它们之前更改UserControls上的Dock或Anchor属性时,它们仍然会被添加但不会渲染.
根据" 如何:锚定和停靠儿童控制 "这应该是可能的.
我使用的是.NET 3.5.
在回答评论时,两条注释行是我试图更改基座的位置.第二点肯定更有意义,但我尝试了另一个,因为它不会伤害.
public void CreateObjectControl( object o )
{
ObjectControl oc = new ObjectControl();
oc.MyObject = o;
//This was a spot I mentioned:
//oc.Dock = DockStyle.Fill;
ObjectDictionary.Add( o, oc );
flowLayoutPanel1.Controls.Add( oc );
//This is the other spot I mentioned:
oc.Dock = DockStyle.Fill;
}
Run Code Online (Sandbox Code Playgroud) 完成平移手势后,启动点击下的单元格不再响应选择.didSelectItemAtIndexPath将在点击其他单元格时触发,但不会触发平移手势下的单元格.
如何让该单元格再次响应触摸输入?或者,我如何检查该单元是否卡在响应事件?
由于平底锅,选择可能永远不会完成.也许在UI中有一个触摸事件.如果我能清除它,也许细胞会再次响应.我尝试过设置[panHandler setCancelsTouchesInView:YES],但它没有改变任何东西.
在评论中,有几个人建议图像可能会悬空并阻挡触摸.在传递给的完成块中animateWithDuration,我有以下几行:
[self.regionScreenshot removeFromSuperview];
self.regionScreenshot = nil;
Run Code Online (Sandbox Code Playgroud)
我确认这些行已执行.
导致我认为不是问题的另一个因素是,在所有细胞中,只有已经习惯拖曳的细胞受到影响.周围的细胞仍然有反应.
- (IBAction)handlePanFrom:(UIPanGestureRecognizer*)recognizer
{
CGPoint translation = [recognizer translationInView:recognizer.view];
float transparencyLevel = 0.85;
if (recognizer.state == UIGestureRecognizerStateBegan)
{
SFCYRegion* centerRegion = self.region;
//North
if (centerRegion.regionToNorth != nil)
{
self.region = centerRegion.regionToNorth;
[self reloadRegion];
self.regionToNorthScreenshot = [self.collectionView snapshotViewAfterScreenUpdates:YES];
}
else
{
self.regionToNorthScreenshot = [[UIView alloc] init];
self.regionToNorthScreenshot.backgroundColor = [UIColor darkGrayColor];
}
[self.view.superview addSubview:self.regionToNorthScreenshot];
self.regionToNorthScreenshot.alpha = transparencyLevel;
self.regionToNorthScreenshot.frame = northFrame; …Run Code Online (Sandbox Code Playgroud) 我已经看到了TCP的ReceiveAsync示例,但没有看到UDP.ReceiveAsync是否与UDP兼容?如果是这样,你看过任何例子吗?
谢谢.
c# ×7
performance ×2
winforms ×2
anchor ×1
asynchronous ×1
constraints ×1
dock ×1
drawing ×1
function ×1
generics ×1
instruments ×1
interface ×1
ios ×1
metadata ×1
nsis ×1
objective-c ×1
pan ×1
reflection ×1
selection ×1
shortcut ×1
sockets ×1
tabs ×1
types ×1
udp ×1
versioning ×1
xcode ×1