小编Joh*_*aft的帖子

为什么不能将成员方法传递给基类构造函数?

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#对象已完全构造并初始化为零.

通过该声明,似乎上述代码应该起作用.显然有一个微妙的区别.

c#

24
推荐指数
4
解决办法
2932
查看次数

为什么图像不会在加载时显示,而是在刷新时显示?

我正在玩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.我确定我只是在做一些愚蠢的事,但我无法弄明白.

javascript html5 html5-canvas

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

使用DateTime.Now有什么问题.作为唯一ID的主要部分?

我曾经用来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)

我被告知这是一个坏主意,但没有任何解释或理由,它仍然困在我的头脑中....我之所以要使用它,是因为它永远是独一无二的.

html c# language-agnostic asp.net security

8
推荐指数
3
解决办法
4173
查看次数

键入"Enter"或"Esc"时如何停止窗口错误声音

我有一个带有单个文本框的表单.没有其他控制.每当我输入"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)

正如我所说,这导致声音无法发挥,但我认为这是不好的形式; 特别是因为我不需要表格上的按钮.

任何人都知道为什么这是行为,如果有更清晰的方法来阻止播放错误声音?

c# winforms

7
推荐指数
2
解决办法
6624
查看次数

为什么file_get_contents()会返回错误"文件名不能为空"?

我几乎是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,那么我只需获取字段的所有空字符串.

我错过了什么简单的概念?

php

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

是Click-Once可用/兼容.NETCF吗?

我开发和管理了大约45个WindowsCE5设备.更新设备上的应用程序是一场噩梦.在CF上进行Click-Once是否可行/可行?

我认为缺乏答案是"不".:)

编辑:这是问题116713的副本

clickonce compact-framework

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

接管别人的代码

我正在接管别人的代码.有什么好方法可以学习程序员尽快完成的工作?我一直在运行它,踩过它看着callstack.我还可以做些什么?

对不起,我忘了提,但是文档很少,我一直在努力修复简单的问题.谢谢!

.net c# winforms

5
推荐指数
4
解决办法
1928
查看次数

编译器琐事:这段代码的结果是什么

我今天正在审查一些代码并遇到了一些代码(由此代码段准确描述)......

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警告调用链包含对虚方法的调用,并可能产生意外结果.

我很好奇,因为正如我所看到的,有两件事情可能发生.

  1. 创建基类的实例将调用没有定义实现的方法.我希望编译器出错,或者由于缺少实现而导致运行时抛出异常.我假设编译器提供了{}的实现 我错误输入了原始代码; 它确实在类中包含了abstract关键字.
  2. 创建派生类的实例将导致对尚未实际构造的类的方法的调用.我原以为这会引发异常.

此代码已在生产环境中使用了几个月.它显然工作正常,没有人注意到任何奇怪的行为.

我希望StackOverflow上的不可思议的人才可以让我对这段代码的行为和后果有所了解.

c# compiler-construction behavior

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

为什么在通用方法中不调用显式运算符

我把这个问题提炼成了我能想到的最简单的代码示例.为什么不从泛型方法调用显式运算符?

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)

c# generics

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

对于new()或Clear(),这就是问题所在

在我目前的工作场所,我遇到了很多类似于以下示例的代码:

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)

.net

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