C♯, C#相談室 Part34
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/11/02(木) 20:45:59前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/
過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0951デフォルトの名無しさん
2008/04/27(日) 21:07:01DateTimePickerで
MinDateに2000/1/1を
MaxDateに2000/12/31を設定しています。
このプログラムをVistaで実行すると
▼ボタンでカレンダーを表示した瞬間に
現在の日付が強制的に2000/12/31(MaxDate)に
置き換えられてしまいます。
Vistaではカレンダー自体が2000/XPと異なっていますが
この動作は仕様なのでしょうか?
0952デフォルトの名無しさん
2008/04/27(日) 21:17:15俺の親はVBといえばVentureBusinessだとか言ってた
0953デフォルトの名無しさん
2008/04/27(日) 21:21:46再現せんね。Vista/.NET 2.0SP1
Value未設定の場合に起動時にMaxValueに設定されるだけだ。
0954デフォルトの名無しさん
2008/04/27(日) 21:22:480955951
2008/04/27(日) 21:33:02ありがとうございます。
再度検証してみましたところ、下記の条件で再現しています。
条件:MinDate〜MaxDateの範囲に、今の日付が含まれないこと。
上記の範囲が今日の日付より昔の場合はMaxDateに
未来の場合はMinDateに、カレンダーを▼で表示する度に
強制的に設定されてしまいます。
0956デフォルトの名無しさん
2008/04/27(日) 23:24:46あとSP当たってる? 影響するかどうかはわからないけど
こんなのも見かけた
ttp://groups.google.co.jp/group/borland.public.delphi.nativeapi.win32/browse_thread/thread/981ce1712e1c46ab/e6e89b23f3e8d002#e6e89b23f3e8d002
0957951
2008/04/28(月) 06:14:40新規アプリで、DateTimePickerを配置(&MaxDate、MinDate設定)
しただけでも同じ現象が起こりました。
SPは
Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1 (KB926602)
Windows2000で開発・ビルドしています。
ちなみに、テスト環境のVistaにはVisualStdioはインストールしていません。
.NetFrameworkのバージョンは3.0でも3.5でも同じ現象が出ます。
リンク先はdelphiですが、同様の現象みたいですね…
0958デフォルトの名無しさん
2008/04/28(月) 09:17:2620kのexeだけを配布しても問題ないよね?
0959デフォルトの名無しさん
2008/04/29(火) 13:32:180960デフォルトの名無しさん
2008/04/29(火) 22:23:59DbCommand command = conn.CreateCommand();
command.CommandText = query;
DbDataReader reader = command.ExecuteReader();
while (reader.Read()) {
int n = reader[0]; // ココ
}
↑みたいな感じで、AccessのmdbファイルにOleDbで接続して、読み込んでいるのだけど、
「ココ」のところの「reader[0]」が、全部文字列を返します。
odbc経由で、下のようなSQLを流して、数値型で作った項目もです。
CREATE TABLE hoge (
N INTEGER
)
oracle + VB.NET2003で、同じような感じで読みこんだときには、とうぜん数値の項目は数値で、文字列は文字列で
帰ってきました。
mdb(Jet)だと、これで正しい動作なんでしょうか?
それとも自分がどこか間違ってますか?
0961デフォルトの名無しさん
2008/04/29(火) 22:44:12DB関係のトラブルて大抵環境だし
0962デフォルトの名無しさん
2008/04/30(水) 00:18:13DB板はどっちかというとアドミン系の人が多いし、
そういったプログラミング系のは、こっちのスレで聞いた方がいいかも。
データベースプログラミング全般スレ
http://pc11.2ch.net/test/read.cgi/tech/1097295557/
一見、過疎ってるように見えるが、自分が質問したときは直ぐに教えて貰えたし。
0963デフォルトの名無しさん
2008/04/30(水) 00:51:06普通は全部文字列=StringじゃなくObject型だっと思うが?
全てInt32型なら
int n = reader.GetInt32(0);
でおkと思うよ
もしくは
int n = (int)reader[0];
とか
0964デフォルトの名無しさん
2008/04/30(水) 23:39:22>>960 のコードじゃ問題はなかった。(説明用に書いたコードで実際にバグの出てるコードとは違う)
reader[0] まではしっかりDBの型が保存されてて、(int)reader[0]とかやっても、問題ありませんでした。
readerの内容をDataTableに移し変えて、ロジック部分ではそれを利用してたのだけど、移し変える方法が
まずくて、全部文字列に変化してました。
実際はこういう感じのコードでした。
DataTable table = ExecReader("SELECT ・・・"); // SQLを投げると、結果をDataTableに入れて返す関数
DataRow row = table.Rows[0];
(int)row["hoge"]; // ここでキャスト失敗の例外発生
0965デフォルトの名無しさん
2008/04/30(水) 23:44:07なぜ素直にFillしないんだろう
0966デフォルトの名無しさん
2008/04/30(水) 23:48:090967デフォルトの名無しさん
2008/05/01(木) 16:35:59// 何箇所も変更場所があるのは好ましくない
class MyComponent1
{
string myProperty = "初期文字列";
[DefaultValue("初期文字列")]
public string MyProperty { get { return myProperty; } set { myProperty = value; } }
public MyComponent1() { }
}
// リファクタリングで MyProperty を書き換えると GetProperty("MyProperty") に変更が入らない
// 結局複数個所を書き換える方が見通しがいい
class MyComponent2
{
string myProperty;
[DefaultValue("初期文字列")] // ここを書き換えたら myProperty の初期値にも反映したい
public string MyProperty { get { return myProperty; } set { myProperty = value; } }
public MyComponent2()
{
var defaultValue = typeof(MyComponent2).GetProperty("MyProperty").GetCustomAttributes(typeof(DefaultValueAttribute), false)[0];
myProperty = defaultValue.ToString();
}
}
0968デフォルトの名無しさん
2008/05/01(木) 16:36:430969デフォルトの名無しさん
2008/05/01(木) 16:49:220970デフォルトの名無しさん
2008/05/03(土) 13:18:17iTextSharp使ってテンプレート読込んだけれど、その後の文字描画がテンプレートの下に隠れてしまうが、
レイヤの順序を操作する方法とかあるのでしょうか?
テンプレート読込み後に文字描画しても、その逆でも同じように隠れますが。
0971デフォルトの名無しさん
2008/05/03(土) 13:29:260972デフォルトの名無しさん
2008/05/05(月) 06:22:480973デフォルトの名無しさん
2008/05/05(月) 20:42:47C#, C♯, C#相談室 Part46
http://pc11.2ch.net/test/read.cgi/tech/1208791919/
0974デフォルトの名無しさん
2008/05/05(月) 20:44:260975デフォルトの名無しさん
2008/05/05(月) 20:49:380976デフォルトの名無しさん
2008/05/06(火) 00:49:36C++のconstとかconstとかconstがよくわからない。
前はDelphiやってたからか余計に混乱する。
Effective C++とかModern C++ Designeとか読んでもモヤモヤする。
同じ職場の別プロジェクトのプログラマーはクラス全部(という表現がよいのかわからんが?)
constにしようと時間の無駄に気づかずやっきになっている。
C#風に言えばどうなんだ?
0977デフォルトの名無しさん
2008/05/06(火) 00:51:17おかしい感覚らしい。
0978デフォルトの名無しさん
2008/05/06(火) 01:35:540979デフォルトの名無しさん
2008/05/06(火) 01:40:51const 使ってる既存のライブラリを利用する際に
問題が発生することがあるんだよ。
const 使わないやつは死刑だ。
0980デフォルトの名無しさん
2008/05/06(火) 01:42:26全部ってのはメンバ関数全部のことか、メンバ変数のことかどっちだ?
0981デフォルトの名無しさん
2008/05/06(火) 02:36:25・変数自身へのconst: 変数を変化しない/させない。定数。
・(ポインタの)ポイント先へのconst: そのポインタからは読み込みしかしない。
・メンバ関数に付く:そのメンバ関数からは(thisに対して)読み込みしかしない。
で 、ここでmutableの登場。実装上は書くんだけど、意味的には読み込みだけ、みたいな
(典型的にはキャッシュみたいな)メンバ変数に付けるとconstメンバ関数からも書ける。
0982デフォルトの名無しさん
2008/05/06(火) 09:54:561. 直定数(literal: 1 とか 0.5 みたいな数値)に名前が付いてるだけ。
コンパイル結果がまさに定数。
2. コンパイラが不変な値と認識してるだけのもの。
コンパイル結果は通常の変数と変わらないんだけど、
プログラマが値を変更できないもの。
の2つある。
C# の const は 1 の意味でしか使えない。
readonly が 2 の意味に近いけど、readonly はプロパティとかを書きかえれちゃうんで不完全。
C++ の const は 2 の意味でも使える。
というか、大昔には 2 の意味でしか使えなかった(1 はマクロを使って定義)。
0983デフォルトの名無しさん
2008/05/06(火) 10:04:04素朴な疑問。
君のいう1と2の区別っていうのは
(a) Cではなくアセンブラレベルの話をしている場合
(b) ROMを持った環境の話をしている場合
でしか意味がない区別のように感じるけどどうなの。
0984デフォルトの名無しさん
2008/05/06(火) 10:13:321 は配列の静的なサイズ指定に使えるが
2 は使えない。
0985デフォルトの名無しさん
2008/05/06(火) 10:22:51なるほど確かに。
0986デフォルトの名無しさん
2008/05/06(火) 11:21:13あと、まあ、Cみたいにパフォーマンスを気にする言語では、
コンパイル結果が定数になってるかどうかは結構重要。
load 命令が1個増えるだけで実行だいぶ遅くなるから。
0987デフォルトの名無しさん
2008/05/06(火) 11:27:20- メモリが不変
- (メソッド呼び出しの結果が変わらないという意味で)
外部から見て不変に見える
という区別も。
後者は、例えば最初に1回だけ計算して、その値をキャッシュしとくような場合、
外から見た値としては毎度同じ値しか返さない(=不変)なんだけど、
最初のキャッシュ計算のときにメモリ操作は発生しちゃう。
C++ の mutable キーワードはそういうときのためにある。
0988デフォルトの名無しさん
2008/05/06(火) 23:02:520989デフォルトの名無しさん
2008/05/06(火) 23:31:38というか、学者肌の人間が導入したけど
実務上ほとんど使わないから一般プログラマーが見向きもしなかった
って感じじゃない?
言語マニアと一般人の温度差ってのはよくある話。
0990デフォルトの名無しさん
2008/05/07(水) 07:54:410991デフォルトの名無しさん
2008/05/07(水) 10:25:21正確には >>982 の1の意味以外の const に意味がないことが判明したんだよ、メタメタしたプログラムを書きまくるなら、すぐに気づける
一切言語のキャスト等を一切使わず、言語の制約にも抵触せずに const 変数を書き換える大技がある、少し頭をひねってみると面白いよ。
constの意味は、自分でコードするときに、仕損じがないようにするためのお呪い以上の意味は無かったんだよ。
新しい言語では削除してしまうのが吉、ややこしくなるだけだから。
0992デフォルトの名無しさん
2008/05/07(水) 13:27:22文字列に関する部分で、char配列やstd:stringがそう。
多くの言語では文字列は特別な型として扱うことが多い。
C#やJavaは不変クラスで対応している。
それで必要がなくなった。
不変クラス文字列は文字を編集する操作には向かないが、
広く参照を分散させることやマルチスレッドに非常になじむという特徴を持っている。
0993デフォルトの名無しさん
2008/05/07(水) 19:19:11C#が出来たときに最先端と思って選んだけど
ネイティブコードを吐くC++の方が実用性がある
0994デフォルトの名無しさん
2008/05/07(水) 19:46:340995デフォルトの名無しさん
2008/05/07(水) 20:19:280996デフォルトの名無しさん
2008/05/07(水) 20:20:38D 2.0 は扱えないぜ・・・
0997デフォルトの名無しさん
2008/05/07(水) 20:34:410998デフォルトの名無しさん
2008/05/07(水) 20:41:460999デフォルトの名無しさん
2008/05/07(水) 20:45:49お次はココへ
C#, C♯, C#相談室 Part46
http://pc11.2ch.net/test/read.cgi/tech/1208791919/l50
1000デフォルトの名無しさん
2008/05/07(水) 20:46:33::::::::::::::::::::::::::::: ;.' .| | ';:::::::::::::::::::::
:::::::::::::::::::::::::::;.' | | ';:::::::::::::::::::
:::::::::::::::::::::: ;.' ┼ i 亅_|, -、 ';:::::::::::::::::
::::::::::::::::::::;.' 厂/ ィ ⌒ヽ. ';:::::::::::::::
::::::::::::::: ;.′ // .|rqミLノ_l | 〉 ';:::::::::::::
:::::::::::::;.' ー匕 人公┘ ヒ}リ./ 厂}';::::::::::::
:::::::: ;.′ └冖ー> 、 n 火// .'::::::::::: 輝かしい1000!
::::::;.' ゜' /.に二二二 イ> ';::::::::
: ;.′ , ‐― 、:::{ ';::::::
:' 。 / .:!.:.i:|::ト、 \.ヘ. ';::::
./ .:トLハ忙7| :l. Yヘ ';::
{j.:l:忙! くノ .:.| ∧ ⊥ ';
f^Y 礼_ ゥ イ .:.:.| ::∧ |
��二.二.rへ. 二.|厂〕 .:.|ーイ
+ o . . └ヘ \/ /卜トゝ | . .
: : \_/ | .| : | :
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。