C#問題集をGitBookにまとめてます

こんにちは。

先日、C#の問題を投稿していましたが、良い機会なのでGitBookでまとめることにしました。

https://223n.gitbook.io/csl/

この問題集は、自分がC#の勉強をする際につまづいたり、ほかの方に教えていた際に困っていたところなどをメモしていたのを問題集にしています。

なるべく細かい解説を入れるようにしていますが、誤っていたらGitHubのリポジトリにIssueを送っていただければと思います。

今後もよろしくお願いします。

(練習問題)StringBuilderでの文字列生成

問題

次の仕様で出力されるソースコードとなるように、選択肢から4つのコードを選び正しい順番に並べなさい。

仕様

  • 1行目に文字列「あいうえお」、2行目に「かきくけこ」を出力するための文字列を生成します。
  • 1行目と2行目は、改行で区切られます。

選択肢

  • sb.Append("/l");
  • sb.Append("かきくけこ");
  • sb.Append("/t");
  • sb.AppendLine();
  • sb.Append("あいうえお");
  • sb.Append(String.Empty);
  • var sb = new StringBuilder();

(練習問題)パフォーマンス・カウンタ

問題

次のソースコードは、パフォーマンスカウンタを作成するCreateCountersメソッドのソースコードです。

なお、左端の数字は参考のために追加した行数です。

11行目にCounterAがWindowsパフォーマンス・モニタ(PerfMon)で使用できるように適切なコードを1つ選択しなさい。

ソースコード

01 void CreateCounters() {
02     if (!PerformanceCounterCategory.Exists("Contoso")) {
03         var counters = new CounterCreationDataCollection();
04         var ccdCounterA = new CounterCreationData{
05             CounterName = "CounterA",
06             CounterType = PerformanceCounterType.SampleFraction;
07         };
08         counters.Add(ccdCounterA);
09         var ccdCounterB = new CounterCreationData{
10             CounterName = "CounterB";
11
12         };
13         counters.Add(ccdCounterB);
14         PerformanceCounterCategory.Create("Contoso", "Help string", PerformanceCounterCategoryType.MultiInstance, counters);
15     }
16 }

選択肢

  • A. CounterType = PerformanceCounterType.RawBase;
  • B. CounterType = PerformanceCounterType.AverageBase;
  • C. CounterType = PerformanceCounterType.SampleBase;
  • D. CounterType = PerformanceCounterType.CounterMultiBase;

(練習問題)GACに登録する方法

問題

あなたは、複数のアプリケーションで使用されるアセンブリを開発しています。

グローバル・アセンブリ・キャッシュ(GAC)にアセンブリをインストールする方法として正しいものを2つ選びなさい。

選択肢

A. アセンブリ登録ツール(regasm.exe)を使用してアセンブリを登録し、GACにアセンブリをコピーする。

B. ストロング名ツール(sn.exe)を使用してGACにアセンブリをコピーする。

C. Microsoft登録サーバー(regsvr32.exe)を使用してGACにアセンブリを追加する。

D. グローバル・アセンブリ・キャッシュ・ツール(gacutil.exe)を使用してGACにアセンブリを追加する。

E. Windowsインストーラー2.0を使用してGACにアセンブリを追加する。

(練習問題)適切なアクセス修飾子

問題

あなたは、Carというクラスを開発しています。

Carクラスには、GetStatusメソッドというメソッドが含まれています。

GetStatusメソッドが、Carクラスから派生する任意のクラスからは使用できず、Carクラス内でのみ使用できる必要があります。

GetStatusメソッドに適切なアクセス修飾子を1つ選びなさい

選択肢

A. public

B. internal

C. private

D. protected internal

E. protected

(練習問題)分岐処理

問題

次の仕様を満たすソースコードを完成させるため、 [ A ] から [ D ] に適切なものを選択しなさい。

また、 [ A ] から [ D ] で、同じ選択肢を選択することもできます。

仕様

  • GetResponseメソッドは、char型のパラメータを受け取り、string型を返すメソッドです。
  • 検索が成功した場合は、対応した文字列を返します。
  • 検索に失敗した場合は、「invalid choice」を返します。

ソースコード

public string GetResponse(char letter) {
    string response;
    [ A ] (letter) {
        [ B ] 'a':
            response = "alpha";
            break;
        [ C ] 'm':
            response = "mike";
            break;
        [ D ]:
            response = "invalid choice";
            break;
    }
    return response;
}

選択肢

  • switch
  • if
  • case
  • else
  • default

certcheck released

今回、初めてgo言語による証明書の有効期限チェックを行い、Slack通知してくれるプログラムを作成しました。

Github 223n/certcheck

有効期限の残日数が指定日数未満になった際に、Slackに投稿されます。
まだ、機能不足などがあると思いますが、Issueで投稿して頂ければと思います。

Avaloniaを使ってみる

Ⅰ.Avalonia

Avaloniaは、「マルチ・プラットフォーム .NET UI フレームワーク」ということで、C#によるXAML形式でアプリ開発が出来るフレームワークです。

Avalonia – GitHub

Ⅱ.導入方法とプロジェクトの作成方法

※ここでは、Visual Studio 2017 Version 15.8.4で解説しています。

1.画面から「ツール(T)」→「拡張機能と更新プログラム(U)…」をクリックします。

Visual Studioのメイン画面

2.「オンライン」を選択します。

3.右上の検索ボックスに「Avalonia」を入力します。

4.「Avalonia for Visual Studio」を選択します。

5.インストールをクリックします。

6.「Visual Studioの再起動」が促されますので、一度、Visual Studioを終了して再起動します。

拡張機能と更新プログラム

7.新しいプロジェクトを開くと、「Visual C#」に「Avalonia」が追加されます。

8.「Avalonia Application」もしくは「Avalonia MVVM Application」を選択してプロジェクトを作成します。

新しいプロジェクト

後は、作成できたプロジェクトを元に開発を進めていくのですが、まだXAML開発はやったことがないため、少しずつ勉強しながらやりたいと思います。

RVMでrubyをインストールしたのにrubyが認識されない

RVMを公式サイトのやりかたを見ながらインストールしたのですが、
なぜかrubyを動かそうとすると、そんなコマンドは無いと言われました。

今回は、この対応メモです。

223n@ja223n:~$ ruby -v
bash: ruby: コマンドが見つかりません

PC: DELL Inspiron 14
OS: Debian 9 (stretch) 64bit

223n@ja223n:~$ rvm install ruby-head
Warning, new version of rvm available '1.29.4', you are using older version '1.29.3'.
You can disable this warning with: echo rvm_autoupdate_flag=0 >> ~/.rvmrc
You can enable auto-update with: echo rvm_autoupdate_flag=2 >> ~/.rvmrc
Checking requirements for debian.
Requirements installation successful.
Installing Ruby from source to: /home/tatami/.rvm/rubies/ruby-head, this may take a while depending on your cpu(s)...
Cloning from https://github.com/ruby/ruby.git, this may take a while depending on your connection. 
HEAD is now at 297ae3437e mjit.c: clean up unit link from iseq
From https://github.com/ruby/ruby
* branch trunk -> FETCH_HEAD
Already up-to-date.
git checkout trunk
Copying from repo to src path...
ruby-head - #autoreconf.
ruby-head - #configuring.................................................|
ruby-head - #post-configuration..
ruby-head - #compiling...................................................-
ruby-head - #installing...............
ruby-head - #making binaries executable..
Installed rubygems 3.0.0.beta1 is newer than ignore provided with installed ruby, skipping installation, use --force to force installation.
ruby-head - #gemset created /home/tatami/.rvm/gems/ruby-head@global
ruby-head - #importing gemset /home/tatami/.rvm/gemsets/global.gems.......
ruby-head - #generating global wrappers........
ruby-head - #gemset created /home/tatami/.rvm/gems/ruby-head
ruby-head - #importing gemsetfile /home/tatami/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-head - #generating default wrappers........
ruby-head - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-head - #complete 
Ruby was built without documentation, to build it run: rvm docs generate-ri

さらに、Useコマンドを実行したところ、なにやらおかしなことを言われます。

223n@ja223n:~$ rvm use ruby-head
RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for a example.

確かに、 /bin/bash –login を実行すると、rubyは正しく動くようです。
参照関連が正しく設定されていないと思い調べたところ、こちらの記事を見つけました。

RVM 経由で Ruby を入れるときにハマったこと / tsujimotterのノートブック

記事にもあるとおり、以下のコマンドを実行する必要があったみたいです。

source ~/.rvm/scripts/rvm

今回は、~/.bashrcの最後に上のコマンドを追加して、正常に動くことを確認しました。