12

Consider this code:

static void Main(string[] args)
    {
        Log("Test");//Call Log(object obj)
        Log(new List<string>{"Test","Test2"});;//Also Call Log(object obj)
    }

    public static void Log(object obj)
    {
        Console.WriteLine(obj);
    }

    public static void Log(List<object> objects)
    {
        foreach (var obj in objects)
        {
            Console.WriteLine(obj);
        }
    }  

In first line i call log with a string value and it invokes Log(object obj) but in the second line i call Log with list of string new List<string>{"Test","Test2"} but compiler invoke Log(object obj) instead of Log(List<object> objects).

Why compiler has this behavior?

How can i call the second log with list of string?


The documentation of justTouched() http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/Input.html#justTouched() doesn't really tell us what "just" means. Might be the touch from the splash screen.

Use isTouched() instead which should not have that problem.

Furthermore I think it's smarter to implement InputProcessor http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/InputProcessor.html so you can handle the events right when they occur, and you don't need to check every frame.

4

4 に答える 4

1

これはLiskov Substitution Principalの良い例だと思います。LSP の簡単な説明では、動物が噛むことができるなら、犬 (動物である) も噛むことができるはずだと主張しています。

それは論理の三段論法のようなもので、次のように述べています。

  1. すべての動物は食べる
  2. 牛は動物です
  3. だから牛は食べる

ここで、コンパイラはこの原則に従うと思います。

  1. すべてのオブジェクトをログに記録できます ( public void Log (object obj) {})
  2. List<string>オブジェクトです
  3. したがってList<string>、そのメソッドのパラメーターとして使用して、ログに記録できます。
于 2013-08-21T12:32:35.297 に答える