body#background

bodyの背景に画像を設定するには、bodyタグのbackground属性に画像ファイルのURLなどを指定する。

<body> - 本文
基本的な説明 �A

同じ場所にある"test.png"を指定。

$ ls
body.html  old  test.png
$ sudo vi body.html
$ cat body.html
<html>
  <head>
    <title>body#background</title>
  </head>
  <body text="#ff0000" background="test.png">
    ABCDE<br>FGHIJ<br>KLMNO
  </body>
</html>
$

こんな感じでtest.pngは置いてある。

背景
背景

背景に設定された。

Sample/html/body/background/src/body at master · bg1bgst333/Sample · GitHub

Predicate<T>

引数があって、戻り値がboolの場合、Predicate<T>を使うといい。

https://docs.microsoft.com/ja-jp/dotnet/api/system.predicate-1?view=netframework-2.0

ラムダ式のトピックで作ったファイルチェックデリゲートをPredicate<T>に置き換える。
まず、ファイルチェックデリゲートのプログラムだけを書くと、

// 名前空間の登録
using System;       // 共通データ型と基本クラス(System名前空間)
using System.IO;    // ファイル入出力とデータストリーム(System.IO名前空間)

// メインクラス
class MainClass // MainClassの定義
{

    // デリゲートの宣言
    delegate bool FileCheckDelegate(string filename);   // ファイルが存在するかをチェックする関数を持つデリゲート.

    // メインメソッド
    static void Main()  // Mainメソッドの定義
    {

        // ファイルチェックデリゲートの生成.(処理内容をラムダ式で定義.)
        FileCheckDelegate fcd = (filename) =>
        {

            // ファイルが存在するかをチェック.
            if (File.Exists(filename))  // File.Existsでfilenameなるファイルが存在するかチェック.
            {

                // 存在する場合.
                Console.WriteLine(filename + " is Exists."); // "Exists"と出力.
                return true;    // trueを返す.

            }
            else
            {

                // 存在しない場合.
                Console.WriteLine(filename + " is not Exists."); // "not Exists"と出力.
                return false;    // falseを返す.

            }

        };

        // "test.txt"があるかどうかチェック.
        if (fcd("test.txt"))    // fcdに"test.txt"を渡す.
        {

            // OK
            Console.WriteLine("Check OK."); // "Check OK."と出力.

        }
        else
        {

            // NG
            Console.WriteLine("Check NG."); // "Check NG."と出力.

        }

    }

}

で、ここからデリゲート型の宣言を削除し、定義済みデリゲートPredicate<T>を使うと、

こうなる。

test.txt is Exists.
Check OK.
続行するには何かキーを押してください . 

ここは変わらない。

Sample/dotnet/Predicate_T/Predicate_T/src/Predicate_T_ at master · bg1bgst333/Sample · GitHub

Func<T, TResult>

戻り値がある関数の場合は、定義済みデリゲートFunc<T, TResult>を使う。

https://docs.microsoft.com/ja-jp/dotnet/api/system.func-2?view=netframework-3.5

delegateのトピックで作った、文字列を括弧で囲んだ文字列を返すデリゲートを今度はそのままで、Func<T, TResult>を使う。

ソースコードとしては、これでいいが、ビルドすると、

ビルドエラー
ビルドエラー

エラーが出るので、

参照の追加
参照の追加

参照の追加で、

System.Core
System.Core

.NET 3.5のSystem.Coreを追加。

ビルド成功
ビルド成功

成功したので実行すると、

str1 = (ABCDE)
str2 = <XYZ>
続行するには何かキーを押してください . . .

ここは変わらない。

Sample/dotnet/Func_T_TResult/Func_T_TResult/src/Func_T_TResult_ at master · bg1bgst333/Sample · GitHub

Action<T>

定義済みデリゲートを使うことで、デリゲート型の定義が不要になる。
戻り値のない関数を扱う場合は、Action<T>を使う。

https://docs.microsoft.com/ja-jp/dotnet/api/system.action-1?view=netframework-2.0

delegateのトピックで作った、文字列を括弧で囲んだ文字列を返すデリゲートを、まずは戻り値をvoidにして、出力するだけにする。

// 名前空間の登録
using System;       // 共通データ型と基本クラス(System名前空間)

// デリゲートの定義.
delegate void BracketsDelegate(string message);   // 引数がstringで戻り値のない関数を持つデリゲートBracketsDelegate.

// メインクラス
class MainClass // MainClassクラスの定義
{

    // メインメソッド
    static void Main()  // Mainメソッドの定義
    {

        // デリゲートの生成.
        BracketsDelegate brackets1 = new BracketsDelegate(Brackets1);       // newでBracketsDelegateのbrackets1を生成.(コンストラクタにはBrackets1を渡す.)
        BracketsDelegate brackets2 = new BracketsDelegate(Brackets2);       // newでBracketsDelegateのbrackets2を生成.(コンストラクタにはBrackets2を渡す.)

        // デリゲートの参照でコールバックメソッドが呼ばれる.
        brackets1("ABCDE");  // brackets1に"ABCDE"を指定すると. コールバックメソッドのBrackets1が呼ばれる.
        brackets2("XYZ");    // brackets2に"XYZ"を指定すると, コールバックメソッドのBrackets2が呼ばれる.

    }

    // 括弧('('と')')で囲んで出力する場合のメソッドBrackets1.
    static void Brackets1(string message)
    {

        // 括弧で囲んだ文字列を出力.
        Console.WriteLine("(" + message + ")"); // messageを括弧で囲んだ文字列を出力.

    }

    // タグ('<'と'>')で囲んで出力する場合のメソッドBrackets2.
    static void Brackets2(string message)
    {

        // タグで囲んだ文字列を出力.
        Console.WriteLine("<" + message + ">"); // messageをタグで囲んだ文字列を出力.

    }

}

newを使わない新しいデリゲート構文にする。

// 名前空間の登録
using System;       // 共通データ型と基本クラス(System名前空間)

// デリゲートの定義.
delegate void BracketsDelegate(string message);   // 引数がstringで戻り値のない関数を持つデリゲートBracketsDelegate.

// メインクラス
class MainClass // MainClassクラスの定義
{

    // メインメソッド
    static void Main()  // Mainメソッドの定義
    {

        // デリゲートの生成.
        BracketsDelegate brackets1 = Brackets1;       // 新しいデリゲート構文(newではなく関数を直接指定.)でbrackets1を生成.
        BracketsDelegate brackets2 = Brackets2;       // 新しいデリゲート構文(newではなく関数を直接指定.)でbrackets2を生成.

        // デリゲートの参照でコールバックメソッドが呼ばれる.
        brackets1("ABCDE");  // brackets1に"ABCDE"を指定すると. コールバックメソッドのBrackets1が呼ばれる.
        brackets2("XYZ");    // brackets2に"XYZ"を指定すると, コールバックメソッドのBrackets2が呼ばれる.

    }

    // 括弧('('と')')で囲んで出力する場合のメソッドBrackets1.
    static void Brackets1(string message)
    {

        // 括弧で囲んだ文字列を出力.
        Console.WriteLine("(" + message + ")"); // messageを括弧で囲んだ文字列を出力.

    }

    // タグ('<'と'>')で囲んで出力する場合のメソッドBrackets2.
    static void Brackets2(string message)
    {

        // タグで囲んだ文字列を出力.
        Console.WriteLine("<" + message + ">"); // messageをタグで囲んだ文字列を出力.

    }

}

最後に、デリゲート型の定義を削除し、Action<T>を使う。


(ABCDE)
<XYZ>
続行するには何かキーを押してください . . .

結果は変わらない。

Sample/dotnet/Action_T/Action_T/src/Action_T_ at master · bg1bgst333/Sample · GitHub

Array

Arrayは配列オブジェクト。

配列(Array)
Array - JavaScript | MDN

いろいろなコンストラクタはあるが、カンマ区切りで初期要素を指定する方法をやってみる。

3つの文字列をコンストラクタに渡す。
for文と配列要素の参照はC/C++などと同様である。iがvarで定義してあるぐらい。古い書き方である。

&quot;ABC&quot;
"ABC"

と出た後に、

&quot;DEF&quot;
"DEF"

と出て、

&quot;GHI&quot;
"GHI"

となる。

Sample/js/Array/Array/src/Array at master · bg1bgst333/Sample · GitHub

Delegate

Delegateクラスは、delegate型の基底クラス。

Delegate Class (System) | Microsoft Docs

基本的にシステムやコンパイラしか継承できない特殊なクラス。
ただ、delegate型のオブジェクトから、Delegateクラスのメンバは、使うことができる。
Delegate.Combineで2つのデリゲートを結合したかのようなデリゲートを作成する。

Test1のデリゲートtest1を呼んで改行を出力、Test2のデリゲートtest2を呼んで改行を出力、の後にDelegate.Combineでtest1とtest2を結合したデリゲートtest3を生成する。
それを呼び出すと、

ABC

DEF

ABC
DEF
続行するには何かキーを押してください . . .

このようにtest1とtest2の両方が呼ばれる。
つまり、マルチキャストデリゲートである。

Sample/dotnet/Delegate/Delegate/src/Delegate_ at master · bg1bgst333/Sample · GitHub