我目前正在使用Windows窗体进行C#项目.在此过程中,我做了以下几点
void HideButtons(object sender, EventArgs e)
{
Button hider = ((Button)sender);
foreach(Button tohide in hider.Parent.Controls)
tohide.Hide();
hider.Show();
hider.Text = "UnHide";
hider.Click -= new EventHandler(HideButtons);
hider.Click += new EventHandler(ShowButtons);
}
Run Code Online (Sandbox Code Playgroud)
这段代码的目的是有一个按钮,它隐藏容器中的所有其他按钮,除了它本身,然后变成一个取消隐藏按钮,反向执行相同的操作.
现在,这一切都很好,除了,当我编译这个时,我意识到我遇到了一个问题.hider是它的唯一对象,是((Button)发送者的返回).它不一定是发送者的引用,这段代码可能什么都不做.
但是很低,它看起来就像我想要的那样,并且最初认为它会.这让我想知道,演员是否总是返回对原始对象的引用?如果没有,我如何保证(按钮)发件人=发件人?
我知道双打/整体不是这样的
public static int Main()
{
int a;
double b;
b = 10.5;
a = (int)b;
a++;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
最终得到11,而b为10.5但这可能是由于双打/整数是结构.这种行为让我感到担忧,并且知道它总会返回一个引用会很好,所以我可以把我的烦恼放在心里休息.
我在这里找到了这个问题:OLEDB v/s ODBC
这给了我更多的信息,但没有真正回答我问的问题,所以我将从那里开始.
我在C#工作.我会告诉你关于我如何解决这个难题的长篇故事,但基本上我是在尝试在ODBC和oleDB之间做出决定.
我们与许多不同的客户合作,这些客户拥有各种各样的数据库(一些SQL,一些oracle,一些我从未听说过的东西,也没有记住这个名字)
现在,根据我的理解,ODBC已经过时了,而且是标准.现在OleDB已经出现......并且......是不同的?但完成同样的事情(它与数据库谈话)
为什么我要使用一个而不是另一个?ODBC是(根据上面的帖子)跨平台,这很好,但他提供的信息很少,关于OleDB提供的ODBC没有.
在我的其他研究中,我发现(在MSDN论坛上)人们说"如果可以,请使用OleDB,如果必须,请求使用ODBC"当然,三个人没有给出任何理由,所以我想听一些.
我想提供一个数字,然后收到一组随机数.但是,我希望这些数字是相同的,无论我在哪台计算机上运行它(假设我提供相同的种子).
基本上我的问题是:在C++中,如果我使用rand(),但提供srand()用户定义的种子而不是当前时间,我是否能够在任何计算机上生成相同的随机数流?
我正在研究小行星克隆.一切都是2D,用C++编写.
对于小行星,我正在生成随机的N边多边形.我保证他们是Convex.然后我旋转它们,让它们旋转速度,让它们飞过太空.这一切都有效,非常漂亮.
对于碰撞,我使用的是我自己想到的算法.这可能是一个坏主意,如果推动,我可能会废弃整个事情,并在互联网上找到一个教程.
我已经编写并实现了所有内容,并且碰撞检测工作正常....大部分时间.当屏幕上明显发生碰撞时,它会随机失败,有时会在没有任何触摸时指示碰撞.我要么在某处扯下我的实现,要么我的算法很糟糕.由于我的实现的大小/范围(通过几个源文件),我不想打扰你,只是想让某人检查我的算法实际上是合理的.那时我可以继续寻找一个大虫子.
对于每个小行星,我有一个函数输出绘制小行星时每个顶点应该在哪里.对于每对相邻的顶点,我为它们所在的线生成公式, y=mx+b格式化.然后我从我的一个船顶点开始,测试该点以查看它是否在小行星内.我首先插入点的X坐标,然后将输出与实际Y值进行比较.这告诉我该点是在线之上还是之下.然后我对小行星的中心做同样的事情,以确定哪一半的线被认为是小行星的"内部".然后我重复每对顶点.如果我找到一条线,我的点与小行星的中心不在同一侧,我知道没有碰撞,并且退出检测到该点.由于我的船上有3个点,我必须测试下一个点.如果所有3个点都提前退出,那么船上的任何一点都没有碰撞,我们就完成了.如果由小行星组成的线在所有侧面上绑定任何点,则它位于小行星内部,并设置碰撞标志.
我用这种算法发现的两个问题是:
我已经确保所有多边形都是凸面的,并且已经编写了代码来处理未定义的斜率问题(NAN如果我们除以0,则应该双重返回,因此很容易测试它).
那么,这应该有用吗?
我最近在使用C#工作在Microsoft.Ink dll并正在调试一个问题(与此无关)我注意到,当我调试它时,墨水对象有一个笔画对象,它有一个墨水对象, ....等
这让我很困惑,因为我假设你不能这样做(我来自C++背景)
但是我忽略了它,解决了问题,继续前进.今天,我遇到了类似的问题,因为我看了一个有一个私有成员的类,它和它本身是同一个类.
public sealed class Factory
{
private static Factory instance = new Factory();
}
Run Code Online (Sandbox Code Playgroud)
这怎么可能呢?我现在可以调用instance.instance.instance.instance ...等.正如你可以想象的那样,这伤害了我的大脑,我确信它在计算机上也不会好.编译器如何处理这个问题?兔子洞有多深?
我上课了.
class Part:
def __init__(self,name):
self.name = name
self.count = 0
def __hash__(self):
return hash(self.name)
def __lt__(self,other):
return self.count < other.count
def __eq__(self,other):
return self.name == self.count
Run Code Online (Sandbox Code Playgroud)
我创建了一堆这些对象,并用它们填充列表.此列表最终包含重复项.我需要在我的代码中为一个段,但是当需要输出时,我想只输出每个部分一次.所以我把它贴在一套.
uniqueParts = set(parts)
Run Code Online (Sandbox Code Playgroud)
然后我迭代这个把它写到文件.
for part in uniqueParts:
f.write(part.name+": "+str(part.count)+'\n')
Run Code Online (Sandbox Code Playgroud)
这不起作用.它输出每个重复.由于uniqueParts是一个集合,因此我的类必须出错,而Set不能告诉它们是重复的.
现在,我可以用几种不同的方式解决我的具体问题(重新编写类,所以我不需要它(数据可能太简单,不值得它自己的类)或迭代并删除重复项,或重做我的代码所以重复从来没有出现过)但是我将来可能会再次遇到这个问题,我想知道我需要做些什么才能让套件与我自己编写的类一起工作.
想法/帮助?
我通常不会处理数据库(我为我和我的朋友写的网络应用程序管理了一些小的)所以在问我的问题之前,我将验证我是否理解了一切是如何工作的.
SQL是一个"做"数据库的程序.它管理所有表和方案以及链接,并且它响应于它接收的命令执行大多数操作.您可以手动输入这些命令,或者使用命令编写脚本,或让其他程序将这些命令发送到SQL,但命令并没有真正改变.
当Web应用程序从用户接收输入并将其发送到SQL而不先清除它时,就会发生SQL注入.如果最终用户已经足够了,那么SQL将会看到它应该看作是将数据存储在某个表中的数据的命令,从而产生了讽刺.
典型的SQL注入预防涉及清理用户输入,即删除任何会使SQL认为正在发送命令的字符,而不是数据.
现在,我的问题:
为什么SQL不为我们处理这个?为什么SQL,在每个命令上都没有查找第一个",最后一个",并忽略其中的任何一个?(我不认为)是标准SQL命令语法的一部分,它已经有一段时间了,但如果没有,可能会发生变化)当然,它会阻止你同时发送多个命令(因为第二/第三个命令会被忽略)但是在"我一次发送1个命令"规则上,这几乎是忽略最终用户可能试图拉的任何恶作剧.
我确信其他人已经想到了这一点,并将其视为因某种原因无法工作.但我不知道理解为什么,我想.