小编seb*_*ebf的帖子

两个属性在语义上相同的TypeIds是不同的还是相同的?

MSDN声明该属性TypeId:

实现时,该标识符仅是属性的类型.但是,意图是使用唯一标识符来标识相同类型的两个属性.

但是,预期用途是区分单个属性实例(例如,与应用它们的类的不同实例相关联的那些实例),还是属于具有相同类型但由于其属性值的属性在语义上不同?

例如,说我有以下内容:

public sealed class AmpVolume : System.Attribute
{
    public int MaxVolume { get; set; }
    public AmpVolume(int maxvolume)
    {
        MaxVolume = maxvolume;
    }
}

[AmpVolume(11)]
public class SpinalTapGuitarAmp
{
}

[AmpVolume(11)]
public class SpinalTapBassAmp
{
}

[AmpVolume(10)]
public class RegularAmp
{
}
Run Code Online (Sandbox Code Playgroud)

我应该将TypeId实现为

        get
        {
            return (object)this; //TypeId identifies every individual instance of the attribute
        }
Run Code Online (Sandbox Code Playgroud)

要么

        get
        {
            return (object)MaxVolume; //If we compare two AmpVolume attributes, they should be the same if the …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection typeid

5
推荐指数
1
解决办法
916
查看次数

为什么我不能使用Marshal.Copy()来更新结构?

我有一些代码用于从字节数组中获取结构:

    public static T GetValue<T>(byte[] data, int start) where T : struct
    {
        T d = default(T);
        int elementsize = Marshal.SizeOf(typeof(T));

        GCHandle sh = GCHandle.Alloc(d, GCHandleType.Pinned);
        Marshal.Copy(data, start, sh.AddrOfPinnedObject(), elementsize);
        sh.Free();

        return d;
    }
Run Code Online (Sandbox Code Playgroud)

但是,结构d永远不会被修改,并始终返回其默认值.

我已经查找了"正确"的方法,并且正在使用它,但仍然很好奇,因为我不明白为什么上面的内容不起作用.

它可以很简单:分配一些内存,d,获取指向它的指针,将一些字节复制到由此指向的内存中,返回.不仅如此,但是当我使用类似的代码但是d是T的数组时,它工作正常. 除非sh.AddrOfPinnedObject()没有真正指向d,但那有什么意义呢?

谁能告诉我为什么以上不起作用?

.net c# managed marshalling

5
推荐指数
2
解决办法
2964
查看次数

使用冒号在未知维度的矩阵中进行索引

当MATLAB索引矩阵,我只能指定第一个或最后ñ尺寸,并具有"自动选择"所有其他尺寸是多少?

例如,我正在编写一个接收图像并显示图像的功能imshow,可以显示三维彩色图像(例如 1024×768×3)或二维单色阵列(例如 1024x768).
我的功能并不关心图像有多少颜色通道,imshow会照顾它.我想要做的就是传递参数来选择一个区域:

imshow(frame(x1:x2, y1:y2, :))
Run Code Online (Sandbox Code Playgroud)

我怎么代替最后一个冒号说" 包括所有其他尺寸 "?

matlab multidimensional-array matrix-indexing

5
推荐指数
1
解决办法
867
查看次数

我可以将成员定义/约束为实现两个接口,而不是泛型吗?

以下代码显示了我想要做的事情; 也就是说,我想约束anObject,以便它可以用作使用IInterfaceOne或IInterfaceTwo的各种方法的参数,其中两者都不从另一个继承.

public interface IInterfaceOne { }
public interface IInterfaceTwo { }

public class Implementation : IInterfaceOne, IInterfaceTwo
{
}

public interface IInterfaceOneAndTwo : IInterfaceOne, IInterfaceTwo { }

public class UsingImplementation
{
    IInterfaceOneAndTwo anObject = (IInterfaceOneAndTwo)(new Implementation()); //fails because Implementation doesnt acctually implement IInterfaceOneAndTwo
}
Run Code Online (Sandbox Code Playgroud)

但是这个例子失败了,因为IInterfaceOneAndTwo本身就是一个接口,而Implementation并没有实现它.

我知道如果我使用泛型我可以约束它们,但我想知道,如果有一种方法可以做到这一点没有泛型?

有没有办法说anObject应执行IInterfaceOneIInterfaceTwo不使用IInterfaceOneAndTwo

.net c# oop design-patterns interface

4
推荐指数
1
解决办法
183
查看次数

WS_EX_TRANSPARENT-它实际上是做什么的?

在我的项目中,我创建一个具有用户控制的不透明度的表单。如果表单是完全透明的,则鼠标事件会“消失”(无需我干预),否则我的表单会处理它们。

阅读此问题并覆盖CreateParams属性以WS_EX_TRANSPARENT在窗体上设置标志后,当不透明度为任何<255的值时,它现在允许滑入鼠标事件。

这正是我想要的,但令我担心的是,我不明白它为什么起作用。

根据我的阅读,WS_EX_TRANSPARENT旨在通过在其Paint方法中从其下方的表单中“窃取位”来使该表单显得透明。

  1. 我的窗体的Paint方法及其中的所有控件都不应调用,对吗?由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,所以为什么它会影响输入处理而不影响表单的绘制?

  2. 不透明度应该对鼠标事件的处理没有影响,就好像Paint被覆盖一样,“局部”不透明度应该没关系,不是吗?

可能有人解释,这是什么标志真的呢?它是如何工作的?

c# forms winapi flags winforms

3
推荐指数
1
解决办法
8604
查看次数

以下代码中按位运算符奇怪行为的原因是什么?

我在我的C#应用​​程序中有一个方法试图打包一个整数,但是移位运算符表现得很奇怪.
下面代码中的注释显示了执行行后调试器看到的代码内容.

        long code = 0;          //0x0000000000000000
        code += (0x1111 << 32); //0x0000000000001111
        code += (0x2222 << 16); //0x0000000022221111
        code += (0x3333);       //0x0000000022224444
Run Code Online (Sandbox Code Playgroud)

从第一行开始,我预计括号中包含的代码将首先被执行,这将导致0x1111向左移位32位,但它不是,但在下一行,移位确实发生,并且也是正确的位置(即在添加之前必须移位0x2222,否则结果将为0x33330000).

有什么我错过了解释这个的操作员?

c# bit-manipulation

2
推荐指数
1
解决办法
126
查看次数

WPF使用DataTemplate隐式选择模板,但在“列表”之外

在我的项目中,我有TreeView,其中包含一棵各种类型的对象的树(所有对象均来自同一父类)。

在我的TreeView的右侧,我希望有一个“面板”(目前只有一个网格),该面板显示有关树中当前所选对象的信息。我想使用DataTemplate,如本页第二个示例中所示,根据子类类型调整“面板”的布局和内容。但是,我找不到合适的容器(因为我不想使用列表控件-我想根据树视图中的选择更改一项的显示)。

这个问题问的是同一件事,但我认为答案不适合我,因为我希望模板根据类型动态更改。

即我希望有这样的东西:

<[A Suitable Container] Margin="189,39,12,12" DataContext="{Binding ElementName=treeView1, Path=SelectedItem}">
<DataTemplate DataType="{x:Type local:subclass1}">
    <Grid>
        <!-- subclass1 specific stuff -->
    </Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:subclass2}">
    <Grid>
        <!-- subclass2 specific stuff -->
    </Grid>
</DataTemplate>
</[A Suitable Container]>
Run Code Online (Sandbox Code Playgroud)

wpf binding datatemplate wpf-controls

1
推荐指数
1
解决办法
1735
查看次数

OpenCL函数length()和fast_length()之间有什么区别?

这个OpenCL参考表(断开链接)的第3页,有两个内置的向量长度函数,它们具有相同的参数:length()half_length().

这些功能有什么区别?我从名字中得到一个比另一个更快但在什么情况下?对于这种速度增加,它是否具有准确性?如果不是,为什么一个曾经使用length()fast_length()

performance gpgpu opencl

1
推荐指数
1
解决办法
4346
查看次数

为什么我的条件语句被忽略了?

我正在尝试为GIMP 2.8编写一个方案脚本,它将调整大小并重命名/复制文件.作为其中的一部分,我想根据脚本中的布尔值设置更改输出文件名.

然而,我的条件被忽略了.这是脚本的摘录(基于此线程中的一个):

(define (script-fu-batch-resize globexp globext src) 
 (define (resize-img n f newx suffix srcdir removetailingunderscore) 
  (let* ((fname (car f))

     ;get path, short name + extension (remember to remove source dir to REPLACE with suffix!)
    (fullname (car (last (strbreakup fname "\\"))))
    (filepath (substring fname 0 (- (string-length fname) (string-length (string-append srcdir fullname)))))
    (name0 (car (strbreakup fullname ".")))
    (name1 (substring name0 0 (- (string-length name0) 1)) )

    (when 
    (> 1 0)
    (
        (name0 (name1) )
    )
    )

    (extension (cadr …
Run Code Online (Sandbox Code Playgroud)

scripting scheme if-statement gimp

1
推荐指数
1
解决办法
895
查看次数