C# TemplateMethod

C# VBA 積算・原価管理

Form1.cs

Form2.cs

Form3.cs

取り出しはVBAにて

即席登録

C# オブジェクト指向 基礎知識

ポリモーフィズム

アップキャストは問題ない。ダウンキャストは明示キャストが必要。

ダウンキャストの変換はキャスト元の変数が保持しているインスタンスがキャスト先のクラスと同じの必要がある。通常、アップキャストして戻すときにダウンキャストが発生する。

virtual-overrideがなくても基底クラスでの定義されたメソッドは派生クラスで上書(隠蔽)きできる。ただコンパイラが警告は出す。その状態だと変数の型で呼び出されるメソッドが決まる。virtualだけ付けてoverrideを付けないと同じく変数の型で呼び出す。virtual-overrideがついてインスタンスの型で呼び出す。派生クラスでoverrideだけ付けてvirtualがないとコンパイルエラーになる。

virtual-overrideされるとインスタンスの型で呼ばれるメソッドが決まる。

メソッドのシグネチャ

メソッド名、パラメータの数、順序、型
CLRでは戻り値の型をシグネチャに含めているのでC#/VBとは違う。

C# アクセシビティなど実験色々

┗ グローバル名前空間
┗ 名前空間(namespace)
┗ 型(クラス)空間

5つのアクセシビティ

PUBLIC: 制限されない
PROTECTED: クラス内部から + 派生クラス内部から
INTERNAL: 同一ログラムから可
PROTECTED INTERNAL: 
PRIVATE: クラス内部から

デフォルトのアクセシビティ

型(クラス): INTERNAL
型のメンバ: PRIVATE

付けることのできるアクセシビティ

型(クラス): public、internal

┣ 型のメンバ: public、protected、internal、protected internal、private
┃ ┃
┃ ┣ インターフェースのメソッド: 定義側は表記不要。実装側はpublicのみ
┃ ┃
┃ ┗ 抽象メソッド: private以外は大丈夫 (継承元、継承先で同じアクセシビティにする必要がある)
┃   ┗ 実装側でoverrideする必要あり。

┗ 構造体の子メンバ: public、internal、private

アクセシビティについて実験

private・protectedはクラス内部からしかアクセスできない。インスタンス生成して class.method()などの様に直接使えない。protectedは派生クラスの内部からもアクセスできる。

継承はあくまでもクラス(ひな形の)コピーであってインスンタス生成後にお互いに影響を与えない。

通常、クラスを入れ子にはしないが、クラスのスコープは越えられない。アクセシビティは誰に見せるかを定義するもので、メンバは、アクセシビティで許可した範囲からメッセージを受け付ける。

クラス定義領域では、メンバ変数同士での演算はできない。staticなクラスなら可能。クラス定義領域はインスタンス生成に評価されるため。

コンストラクタをprivateにするとインスタンス生成できないクラスになる。
基底クラスのコンストラクが実行され、次にサブクラスのコンストラクタが実行される。
上の例では、”20″のあと”This is BaseClass”と表示される。

Ubuntu USBメモリ操作

通常はUSBメモリを指すと自動でマウントされる。
/media/okamura/xxx
情報は、
df -hT
あるいは
lsblk
lsblk -i
で確認できる。

/dev/sdb1 が/media/okamura/xxx
にマウントされているのがわかる。

USBメモリはだいたい、
/dev/sda,
/dev/sdb,
/dev/sdc
などで認識される。

現在マウントしている情報は
df -hT
以外にも以下のような確認方法がある。
mount | less -S
cat /proc/mounts | less -S
cat /etc/mtab | less -S
sudo fdisk -l

手動でアンマウントする場合、
sudo umount /media/okamura/xxx

自動マウントしない場合、
sudo mount /dev/sdb1 /home/okamura/mnt
-tオプションはファイルシステム指定
などで直接マウントする。

フォーマット。マウントしているとできない。
sudo mkfs -t ntfs -Q -L backup /dev/sdb1
-tのデフォルトはex2

AutoHotkey TeamViewerのスポンサーセッションを消す

セキュリティソフトを一時停止。
プロンプトは管理者権限で起動(もしかしたら大丈夫かも)

test.ahk

上記ファイルを作成し、
C:\Program Files\AutoHotkey\Compiler
に移動。

コマンドプロンプトから、
cd C:\Program Files\AutoHotkey\Compiler
Ahk2Exe.exe /in test.ahk /out test.exe
にてtest.exeができる。

ログオフする前にクリックしておくと10秒後にウィンドウを消す。

最初はC#だったが、これじゃ消えない。

Windows 拡張子の関連付け

コマンドでの設定

拡張子とファイルタイプの関連付けを確認
assoc
assoc .txt

独自に定義する場合は、拡張子=ファイルタイプ
assoc .mytext=mytextfile

削除する場合、
assoc .mytext=

ファイルタイプで起動するプログラムの確認
ftype
ftype textfile

ファイルタイプとプログラムの関連付け
ftype mytextfile=notepad.exe %1

削除の場合
ftype mytextfile=

この設定方法は優先度が低いので、ほとんどの場合
他のソフトに持っていかれる。

優先度が高いのは、
コントロールパネル > 既定のプログラム > ファイルの種類またはプロトコルのプログラムへの関連付け > ファイルの種類ごとに規定のアプリを選ぶ
あるいは、
ms-settings:defaultapps > ファイルの種類ごとに規定のアプリを選ぶ
で変更する方法。

通常であれば、コントロールパネルからの設定がいい。

実際レジストリの色々な箇所で設定されている。

優先度の高い箇所
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Explorer
FileExts
.txt
UserChoice
Progid

ここでは、Application\EmEditor.exeとなっていた。
上記のFileExtsの中で.txt自体を削除してしまうとassocで定義されている
notepadになった。

その次は、以下でここがassocで設定するファイルタイプ
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.txt

schroot debootstrapで環境構築

sudo apt-get install schroot debootstrap

mkdir -p /home/okamura/chroot

sudo debootstrap –arch=i386 –include=sudo jessie /home/okamura/chroot http://ftp.jp.debian.org/debian

–ここから不要(type=directoryにすると自動で処理)

sudo vim /etc/fstab
に以下の内容を追記

proc-chroot /home/okamura/chroot/proc proc defaults 0 0
devpts-chroot /home/okamura/chroot/dev/pts devpts defaults 0 0
/tmp /home/okamura/chroot/tmp none bind 0 0
/home /home/okamura/chroot/home none bind 0 0

sudo mount -a
にて確認

–ここまで不要

sudo vim /etc/schroot/schroot.conf
に以下追記

[jessie]
description=Debian jessie
type=directory
directory=/home/okamura/chroot
# usersにschroot許可するユーザ一覧を列挙
users=okamura
groups=okamura
root-groups=root
aliases=default

–ここから不要

sudo vim /home/okamura/chroot/etc/debian_chroot
を作成しjessieと追記

–ここまで不要

schroot -l
設定で確認

schroot -c jessie -i
環境確認

schroot -c jessie -p
で接続

バージョン確認
cat /etc/debian_version

出荷前工程表

ある帳票から工程管理用の帳票を作ろうとしていた模様。
昔のでハッキリ思い出せない。

C# VBA タイムカードアプリ

以前作ったタイムカードアプリ。氏名などはフォームに直接。

Form1.cs

Form2.cs

DataCheck.cs

C#でmdbに登録してエクセルで抜き出して集計