class Flarg
{
private readonly Action speak;
public Action Speak
{
get
{
return speak;
}
}
public Flarg(Action speak)
{
this.speak = speak;
}
}
class MuteFlarg : Flarg
{
public MuteFlarg() : base(GiveDumbLook)
{
}
private void GiveDumbLook()
{
}
}
Run Code Online (Sandbox Code Playgroud)
编译器给出错误"非静态字段,方法或属性'Project.Namespace.Class.GiveDumbLook'需要一个对象.
这似乎与将动作作为参数传递给任何其他方法没有什么不同.为什么这个无效?
编辑 好的答案.谢谢大家.我想这只会让我感到困惑,因为它似乎是这个问题的另一面硬币; 最高投票答案明确指出
在第一个构造函数运行之前,AC#对象已完全构造并初始化为零.
通过该声明,似乎上述代码应该起作用.显然有一个微妙的区别.
我正在玩HTML5中的canvas元素,我注意到了一种奇特的行为.在初始加载时,我显示的图像不显示.但是,当我刷新浏览器时,它会正确显示.我使用过IE9和Chrome.两者表现相同.JavaScript代码如下所示:
window.onload = load;
function load() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillRect(0, 0, 640, 400);
var image = new Image();
image.src = "Images/smiley.png";
context.drawImage(image, 50, 50);
}
Run Code Online (Sandbox Code Playgroud)
矩形正确地绘制两次,它是仅在浏览器刷新时显示的笑脸.
我正在学习HTML5和JavaScript.我确定我只是在做一些愚蠢的事,但我无法弄明白.
我曾经用来RNGCryptoServiceProvider生成基于字符串的订单ID,但是,有4个实例ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@$%^*()_-会生成已经存在的订单ID.
它让我思考......
为什么我们不能只使用类似的东西:
<html>
...
<p>@GenerateOrderId()</p>
...
</html>
Run Code Online (Sandbox Code Playgroud)
和:
public string GenerateOrderId()
{
return "OID" +
DateTime.Now.Year + DateTime.Now.Month +
DateTime.Now.Day +
DateTime.Now.Hour +
DateTime.Now.Minute +
DateTime.Now.Second +
DateTime.Now.Millisecond;
}
Run Code Online (Sandbox Code Playgroud)
我被告知这是一个坏主意,但没有任何解释或理由,它仍然困在我的头脑中....我之所以要使用它,是因为它永远是独一无二的.
我有一个带有单个文本框的表单.没有其他控制.每当我输入"Enter"键或"Esc"键时,表单就会按照我的意愿运行; 但我听到可怕的Windows错误声音.代码看起来类似于以下内容......
public class EntryForm: Form
{
public EntryForm()
{
}
private void EntryTextBox_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
// do some stuff
Hide(); // I've also used DialogResult = DialogResult.OK here
e.Handled = true;
}
else if(e.KeyCode == Keys.Escape)
{
Hide(); // I've also used DialogResult = DialogResult.Cancel here
e.Handled = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过将以下代码添加到窗体的构造函数来"破解"它并使噪声停止.
AcceptButton = new Button();
CancelButton = new Button();
Run Code Online (Sandbox Code Playgroud)
正如我所说,这导致声音无法发挥,但我认为这是不好的形式; 特别是因为我不需要表格上的按钮.
任何人都知道为什么这是行为,如果有更清晰的方法来阻止播放错误声音?
我几乎是PHP的新手.我的背景是C/C++和C#.我试图反对orient-ify一些简单的PHP代码,但我做错了.
班级代码:
class ConnectionString
{
public $String = "";
public $HostName = "";
public $UserName = "";
public $Password = "";
public $Database = "";
function LoadFromFile($FileName)
{
$this->String = file_get_contents($Filename);
$Values = explode("|", $this->String);
$this->HostName = $Values[0];
$this->UserName = $Values[1];
$this->Password = $Values[2];
$this->Database = $Values[3];
}
}
Run Code Online (Sandbox Code Playgroud)
来电代码:
$ConnectionString = new ConnectionString();
$FileName = "db.conf";
$ConnectionString->LoadFromFile($FileName);
print('<p>Connection Info: ' . $Connection->String . '</p>');
Run Code Online (Sandbox Code Playgroud)
我file_get_contents($Filename)在行上说明错误:文件名不能为空.如果我硬编码文件名代替$ Filename,那么我只需获取字段的所有空字符串.
我错过了什么简单的概念?
我正在接管别人的代码.有什么好方法可以学习程序员尽快完成的工作?我一直在运行它,踩过它看着callstack.我还可以做些什么?
对不起,我忘了提,但是文档很少,我一直在努力修复简单的问题.谢谢!
我今天正在审查一些代码并遇到了一些代码(由此代码段准确描述)......
public abstract class FlargBase{
public FlargBase(){
this.DoSomething();
}
public abstract void DoSomething();
}
public class PurpleFlarg: FlargBase{
public PurpleFlarg()
: base(){
}
public override void DoSomething(){
// Do something here;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器不提供任何错误或警告,但CodeAnalysis警告调用链包含对虚方法的调用,并可能产生意外结果.
我很好奇,因为正如我所看到的,有两件事情可能发生.
此代码已在生产环境中使用了几个月.它显然工作正常,没有人注意到任何奇怪的行为.
我希望StackOverflow上的不可思议的人才可以让我对这段代码的行为和后果有所了解.
我把这个问题提炼成了我能想到的最简单的代码示例.为什么不从泛型方法调用显式运算符?
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = (B)a; // works as expected
b = Cast<B>(a);
}
static TResult Cast<TResult>(object o)
{
return (TResult)o; // throws Invalid Cast Exception
}
}
class A
{
}
class B
{
public static explicit operator B(A a)
{
return new B();
}
}
Run Code Online (Sandbox Code Playgroud) 在我目前的工作场所,我遇到了很多类似于以下示例的代码:
private void GetWidgets(ref List<Widget> widgets){
if(widgets == null){
widgets = new List<Widget>();
}
else{
widgets.Clear();
}
... code to fill widget list
}
Run Code Online (Sandbox Code Playgroud)
和
public class Widgets{
private List <Widget> widgets;
... other private members
public Widgets(){
Clear();
}
public void Clear(){
if(widgets == null){
widgets = new List<Widget>();
}
else{
widgets.Clear();
}
... initialize other private members
}
}
Run Code Online (Sandbox Code Playgroud)
我个人发现在这些例子中使用Clear方法会使代码变得更加丑陋和复杂.我不知道使用Clear方法而不是仅仅创建一个新List会有性能提升,但我更喜欢这样的代码:
private List<Widget> GetWidgets(){
widgets = new List<Widget>();
... code to fill widget list;
return widgets;
}
Run Code Online (Sandbox Code Playgroud)
和
public …Run Code Online (Sandbox Code Playgroud)