我和我的同事在考虑获取代表的调用列表时遇到了这个问题.如果您在类X中创建一个事件,那么您可以从该类中访问该事件的公共方法.但是(请忽略为什么你有公开访问类成员的东西,这不是我们要求的!),如果我们有一个类Y实例化X,并在X中访问事件,它不能调用任何公共方法,例如事件的GetInvocationList().我们想知道它是如何工作的.这是一个代码示例(阅读评论以了解我们的意思):
public class X
{
public delegate void TestMethod();
public event TestMethod testMethod;
private void rubbish()
{
// can access testMethod.GetInvocationList() fine here
testMethod.GetInvocationList();
}
}
public class Y
{
public Y()
{
X x = new X();
x.testMethod += this.test;
// here it says testMethod can only appear on the left hand side of += or -=
// why is this? (i.e. the below line is invalid)
x.testMethod.GetInvocationList();
}
public void test()
{
}
}
Run Code Online (Sandbox Code Playgroud)
出于好奇,你是如何实现这一目标的,以及有这个功能的原因是什么?
非常感谢阿米特
我有一个类似于以下内容的数据框:
date minutes_since_midnight value
2015-01-01 50 2
2015-01-01 60 1.5
2015-01-02 45 3.3
2015-01-03 99 5.5
Run Code Online (Sandbox Code Playgroud)
和另一个看起来像这样的数据框架
date minutes_since_midnight other_value
2015-01-01 55 12
2015-01-01 80 33
2015-01-02 45 88
Run Code Online (Sandbox Code Playgroud)
我想要做的是添加另一列于第一数据帧,这是布尔值在所述第二数据帧中是否存在在相等的值的行日期列,然后一个minutes_since_midnight其是小于或等于所述minutes_since_midnight从第一个数据框.因此,对于上面的示例数据,我们得到:
date minutes_since_midnight value has_other_value
2015-01-01 50 2 False
2015-01-01 60 1.5 True
2015-01-02 45 3.3 True
2015-01-03 99 5.5 False
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
希望这是有道理的,
提前致谢
我不是VBA程序员,所以如果我在这个问题上的一些术语不正确,我会提前道歉.我的一位同事希望在选择后立即从列表框中清除选择.经过一些谷歌搜索,我们发现一种方法是通过Change事件.最初我们尝试过:
Private Sub ListBox1_Change()
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = False
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,似乎将Selected属性设置为False会在列表框中触发Change事件,这实际上会成为无限循环并导致Excel(2007)崩溃.鉴于我们知道有两个条目我们也尝试过:
Private Sub ListBox1_Change()
ListBox1.Selected(0) = False
ListBox1.Selected(1) = False
End Sub
Run Code Online (Sandbox Code Playgroud)
这有效!虽然我们期望相同的行为 - 对于Selected属性的设置会导致Change事件再次触发并获得无限循环.
然而,似乎一旦例如ListBox1.Selected(0)= False,重新触发了Change事件,但是在那次迭代中它没有重新触发这一行 - 我猜是因为它知道这个Selected属性已被设置为False对于这个项目,所以没有任何变化.
但如果是这种情况,那么我们也会在第一个解决方案中期望这种行为.所以看起来ListBox1.Selected(i)= False与直接指定实际项目索引(而不是通过变量)之间存在一些差异i).
有谁知道这种行为的原因?希望这个问题有意义,我试图尽可能地解释它.
谢谢阿米特
我想知道将固定指针从一个方法返回到另一个方法是否安全 - 固定对象是否仍然保持固定?例如
struct TestData
{
public int value;
}
public class Class1
{
private TestData data;
public unsafe TestData* GetDataPtr()
{
fixed (TestData* ptr = &data)
{
// IS THIS SAFE?
return ptr;
}
}
}
public class Class2
{
public unsafe void Test()
{
Class1 x = new Class1();
TestData* ptr = x.GetDataPtr(); // is this still fixed?
ptr->value = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是使用这种风格的东西我一直在获得AccessViolation异常.但是因为我将它改为例如直接从Class1设定值我没有看到问题发生.
编辑:我认为可能修复的原因是,如果从"TestData*ptr = x.GetDataPtr()"之外你试图将fixed()置于"你不能获取已经修复的表达式的地址"...我现在得到它虽然它正在谈论我在"Test()"中的var"ptr"已经被修复了..
我们刚刚开始将Git用于我们的源代码控制。我们有一个中央存储库,可以通过SSH进行访问,因此我们在中央服务器上的authorized_keys文件中设置了各自的密钥。
当您在git中提交时,与该提交相关联的元数据包括例如user.name,但是据我们所知,没有什么阻止我将user.name设置为另一个用户user.name并假装他/她做了承诺。
有什么办法可以防止这种情况吗?例如,将user.name与特定的SSH密钥相关联?
顺便说一句,我的问题不是为什么git允许这样做,我读过有有效的用例。我的问题是,如果我们不想这样做,可以以任何方式防止这种情况发生吗?
谢谢
我正在研究一些代码,其中有很多这样的代码:
private int x;
public void SetX(int new_x)
{
this.SetXValue(new_x);
}
private void SetXValue(int new_x)
{
this.x = new_x;
}
Run Code Online (Sandbox Code Playgroud)
和类似的属性:
private int x;
public int X
{
get { return this.GetX(); }
}
private int GetX()
{
return this.x;
}
Run Code Online (Sandbox Code Playgroud)
我没有得到的是为什么需要私有方法来做实际工作,即为什么不只是有这样的方法:
public void SetX(int new_x)
{
this.x = new_x;
}
public int X
{
get { return this.x; }
}
Run Code Online (Sandbox Code Playgroud)
它只是其他人的个人选择还是有一些使用第一种方式的充分理由?
(我手动输入上面的代码很抱歉,如果有任何错误,但你应该希望看到我想说的话)
干杯A.
有没有办法在你做差异之前从遥控器上取git?我不能例如看到一个允许这个的钩子..如果你不能通过钩子这样做是真的很好的理由还是只是目前不存在的功能/没有需求?
是否可以通过任何客户端工具(例如我使用TortoiseGit for Windows)
我个人认为这将是有用的,因为我总是想与最新版本的遥控器进行比较,我担心我会忘记取..
谢谢