ふらっとC♯(Part5)
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。
前スレッドはこちら
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3)
http://pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1023766485/l50
0153デフォルトの名無しさん
NGNGどういう意味か良く分からないんだが…
0154デフォルトの名無しさん
NGNGImeModeをOFFにしてみたけど、これじゃ半角英数字になってしまうんです。
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNG俺C#やったことないんだけど、質問してもいい?
みんなC#ってなにに使ってんの?
「ネイティブコード吐けるJava」みたいな認識で買おうか迷ってんだけど、
そんなノリで買ってもいいものなんですか?
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG10個は買えバカ
0159156
NGNGやっぱASPで使ってんの?
それともクライアントアプリ?
どうなのよ。
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG全然違う
> やっぱASPで使ってんの?
ASP.NET か?
> それともクライアントアプリ?
どっちもだろ。
0162156
NGNGあー、「結局どーしてーのよ?」みたいななるわな。
具体的にはC/Sタイプのアプリのクライアント側を何で作るか迷ってるのよ。
仕事の合間の趣味の話だから手ごろそうなC#がいいのかなと。
どんなん作りたいかっていうと、MSメッセンジャーみたいのだと思ってくれればいいな。
>>161
全然違うんか。
今まではクライアントアプリっつーとVCかDelphiか、まぁVBとかだったわな。
VCしかできねーけど。
んでひょっこりでてきたC#はどーなのよと思ってな。
Javaでもいんだけど、インストールの説明に「J2SE1.4ランタイムが必要です」って書くのと、
「.NETFrameforkランタイムが必要です」って書くのとじゃちょっとイメージ違うしな。
0163名無しさん@そうだ選挙に行こう
NGNGhttp://www.terrariumgame.net/terrarium/
0164名無しさん@そうだ選挙に行こう
NGNG次期VS.NET(2005)は単体言語版(C#だけとか)で
Web(ASP.NET)機能を除いたグレードのものが格安で
出るらしいです。
趣味ならこれ使ってC#の非Webアプリを創るのが
非常に快適ではないかと思う。VCできるならなおさら
VB.NETに走る必要もないわけだし。
一つだけ問題があるとすれば、2006〜2007年予定の
次世代Windows(Longhorn)までは.NETFrameworkが
デフォのAPIじゃないことだろう。なのでフリーウェアとか
シェアウェアで早期にアプリを公開するつもりなら
これは向いていない。
0165名無しさん@そうだ選挙に行こう
NGNG0166名無しさん@そうだ選挙に行こう
NGNG0167名無しさん@そうだ選挙に行こう
NGNG0168156
NGNG素敵情報サンクス。
サーバ(C++)とクライアント(Java)で作りつつ、
教えてくれた安価モデルが発売されたらクライアントをC#に移植
みたいな方向で考えてみるよ。
時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど、
さすがにバンドルされてないとは考えられないから、
あまりそっちは気にしなくていいかもな。
でもちょっと怖いから調べててみることにする。
マジサンクス!
0169デフォルトの名無しさん
NGNGそんなこと誰も書いてないでしょ
0170デフォルトの名無しさん
NGNGなくなっちゃったよ、せっかくintやらのビット数固定にしたんだから、
その範囲でのみでても付けてもらえると便利っていうか、Cより安全確実でよかったんだけどね。
ちょとさびしい。
頑張ってstruct使ってビットフィールド操作関数作るしかないっすね。
0171デフォルトの名無しさん
NGNGWinFXのことだろ。
0172156
NGNGそれともそーゆーことじゃないのか?
なんにせよいろいろややこしそうだな。
0173デフォルトの名無しさん
NGNGそれの型と同じ型で new をする方法があったら教えてください。
class ClassA() { ... }
class ClassB() { ... }
...
class MyApp
{
void test()
{
object [] list = { new ClassA() , new ClassB() } ;
foreach( object i in list )
{
sub( list[ i ] ) ;
}
}
void sub( object a )
{
「aの型=ClassA/ClassB」 localData = new 「aの型=ClassA/ClassB」() ;
...
}
}
といった事をしたいのですが、System.Reflection を使えばできると聞いたのですが、
分りやすいサンプルがあったらよろしくお願いします。
0174デフォルトの名無しさん
NGNGobject localData = a.GetType().GetConstructor().Invoke( new object [] {} );
0175デフォルトの名無しさん
NGNG有難うございます、助かりました。
0176デフォルトの名無しさん
NGNGでも、実装の仕方としては、class A, B を ICloneable にして Clone() メソッド書くのが普通な気が。
0177デフォルトの名無しさん
NGNGそれでほんとに問題ないのかちゃんと確認した方がいいぞ。
0178デフォルトの名無しさん
NGNGリフレクションの使い方の取っ掛かりが欲しかったので、構わないんです。
コンストラクタ以外にもメソッドを呼び出すときに、もっと複雑なことになるし、この辺りは覚悟していましたし
いずれにしても template が実装されるまでの繋ぎなので。
0179デフォルトの名無しさん
NGNGどうtemplateにからむんでしょう?個人的に興味
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGC#で簡易telnetを作れという問題です。通信の方法がそもそも分かりません
0182デフォルトの名無しさん
NGNGソケット作れ
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGTCPで接続してTELNETプロトコル話せばいいだけ
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=telnet+%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB
0185デフォルトの名無しさん
NGNGSystem.Runtime.Serialization.Formatters.Soap.SoapFormatter
で、オブジェクトをXmlにシリアライズする時は ISerializable でカスタマイズできるみたいですが、
System.Xml.Serialization.XmlSerializer
で、オブジェクトをXmlにシリアライズする時でカスタマイズできる方法は無いんでしょうか?
知っている人いますか?
IList を入れていると、XmlSerializerが頑張っちゃって自動的にシリアライズしてしまうみたいで・・・
IListが入っていても普通のクラスのように振舞わせる事はできないのでしょうか?
0186デフォルトの名無しさん
NGNG取りあえず簡単なIListを実装したコレクションを作ったけど普通にシリアライズ・デシリアライズできたぞ。
XmlSerializerは手軽に使えてカスタムしにくいのが特徴なので、まあいろいろ勘案して。
シリアライズ用の別クラスを作るとか。
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGあぅ、書き損じたんですが、添え字にマイナス値を使えるようにするとアウトなんですよ。
ヘルプを見ると、this[int]インデクサプロパティーを見ているようで、Countとセットで
動作しているみたいなんです。
当然動作するわけも無いのですが、ここでIListを見て勝手に動作されるとちょっと具合が悪いので、
この機能に寝ていてもらいたいのですが、手段が見つからない・・・・
0189デフォルトの名無しさん
NGNGpublic int Add()
{
return 10+10;
}
下のように使うと、Add()の戻り値は変数aに入りますよね。
public void Test()
{
int a = Add();
}
以下の場合だと、Addの戻り値はどこへ格納されるんでしょうか?
publi void Test()
{
Add();
}
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGint main()
{
10 ;
}
とやっても、文としては正しいと認識されます
と、書こうとして、C#でやったら、意味が無いって怒られました。
さすがにチェックすることにしたみたいですね。
0192デフォルトの名無しさん
NGNG上の場合、publicだから外からどんな値が来るかわかりません。
hogeに値が代入された時に、hogeが正しい値かどうかを調べるにはどうしたらいいんですか
0193デフォルトの名無しさん
NGNGプロパティにしてsetアクセサの中でチェックする。
つかまさにそのためにプロパティがあるんだが。
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNGみたいにすればいいんですね。なるほど
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGpublic int hoge {
set {
if (1 <= value && value <= 100)
hoge = value;
else
throw new ArgumentOutOfRangeException();
}
}
ちょっと無理っぽいが、通るのか?
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG自分で作って確かめろ、タコ
0200デフォルトの名無しさん
NGNGなんで?
0201198
NGNGGDIはBitbltで
GDI+はGraphics.DrawImageで
確かめて良いですか?
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG参考になるHPや良い方法があったら教えてください。
例えば、正規分布関数のクラスが、以下のように存在していて
public class DistributionFunctions
{
public static dobule Normal( double x , double a , double v )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
...
}
やりたい事は、
delegate double DoubleToDoubleDelegate( double x ) ;
public class DistributionDelegates
{
static DoubleToDoubleDelegate MakeNormal( double a , double v )
{
ここに手際よく大量生産できるコード
}
}
使い方は
void hogehogeMethod()
{
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
}
0204デフォルトの名無しさん
NGNGよくわからんけど、こんなこと↓がしたいの?
using System;
public class DistributionFunctions {
double a;
double v;
public DistributionFunctions(double x, double y){
a = x;
v = y;
}
public double Normal( double x )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
}
delegate double DoubleToDoubleDelegate( double x );
class Hoge {
static DoubleToDoubleDelegate MakeNormal( double a , double v ) {
//ここに手際よく大量生産できるコード
DistributionFunctions f = new DistributionFunctions(a, v);
return new DoubleToDoubleDelegate(f.Normal);
}
static void Main() {
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
double y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
Console.WriteLine("y = {0}", y);
}
}
0205204
NGNGの{の前に全角スペースが入ってた。。。鬱
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG方法は問わないんですが、そうです、そんな感じです。
そこで、関数の引数を確保するクラスを作る必要がありますよね。
関数の数が多くて、これを全部自動生成してしまいたいんです。
0208204
NGNG> そこで、関数の引数を確保するクラスを作る必要がありますよね。
> 関数の数が多くて、これを全部自動生成してしまいたいんです。
204の例を使っても、好きなだけ関数は作れるけど。。。↓こういうことではない?
static void Main()
{
double d1 = 1.0; // 数字は適当
double d2 = 1.0; // 数字は適当
DoubleToDoubleDelegate[,] df = new DoubleToDoubleDelegate[10,10];
for(int i=0; i < 10; i++, d1 += 0.2){
for(int j=0; j < 10; j++, d2 += 0.2){
df[i,j] = MakeNormal( d1, d2);
}
}
for(int i=0; i < 10; i++){
for(int j=0; j < 10; j++){
double y = df[i,j]( 0.0 ) ;
Console.WriteLine("y = {0}", y);
}
}
}
0209デフォルトの名無しさん
NGNGども、お手数掛けてすみません。
対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
色々探している内にリフレクションという物を使ってみようかと考えていました。
さっそく始めてみたのですが、これがチュートリアルの良いページがなかなか見つからなくて・・・・
ちなみに僕自身、ここに書き込む前に色々考えたのですが、
一般的なC#の構文を使った範囲内ではおそらく良い解決方法はないだろうというのが結論でした。
0210デフォルトの名無しさん
NGNGC#でデータベースに関することを勉強しています。
ボタンを押すとアクセスに「123」というデータを追加するプログラムを書いています。
壁にぶつかりましたので、ご指導していただけませんか。
odbcDataAdapter1などの設定し、以下のボタンの内容を書きました。
odbcConnection1.Open();
odbcDataAdapter1.InsertCommand.Parameters["@ab"].Value="123";
odbcDataAdapter1.InsertCommand.ExecuteNonQuery();
odbcDataAdapter1.Fill(dataSet11);
odbcConnection1.Close();
すると
'System.IndexOutOfRangeException' のハンドルされていない例外が
system.data.dll で発生しました。
0211デフォルトの名無しさん
NGNG> 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
> 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
これが結構まっとうな方法な気もしますが。。。
もしかして、パラメータが変わるだけではなく、どんな関数を作るかは
あらかじめ決まってない、ってことですか?
C++でいえば、boost::lambdaみたいなことをしたいのかなぁ?
> しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
> 色々探している内にリフレクションという物を使ってみようかと考えていました。
リフレクションで出来るかどうかはわかりませんが、一応参考に。
http://members.jcom.home.ne.jp/1213687801/cs/reflection/reflection4.html
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemreflectionemittypebuilderclasstopic.asp
0212デフォルトの名無しさん
NGNGここにある例が参考になりませんかね。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqldataadapterclassinsertcommandtopic.asp
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG例えば、オセロプログラムを考えるとします。
オセロのマスの部分にButtonから継承したクラスMasuを使います。
Masuを8*8個集めた配列をBoardとします。
オセロゲーム ━━ Board (集約する)━━ Masu という風になっていますが、
Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、
Masuからは隣のMasuなんて分かりませんよね?
だからBoardに頼んで調べてもらいたいわけですが
どうやったらそうできるのかがわからないです。どうしたらいいのですか?
0215デフォルトの名無しさん
NGNGO クラスBoard
でした
0216デフォルトの名無しさん
NGNGMasu に必要な機能は、
・そのマスの内容を保持
・画面に描画する
・クリックされたことを、Board に通知する
の3つでいいんじゃない?
ひっくり返すのは、Board でやればいい。
0217デフォルトの名無しさん
NGNGその三番目のboardに通知する方法が分からんですよ。
0218デフォルトの名無しさん
NGNGClickイベント。
0219デフォルトの名無しさん
NGNGboardのメソッドの引数に自分を渡せばいい。
0220デフォルトの名無しさん
NGNGもっと
PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
0221デフォルトの名無しさん
NGNG高度すぎ。質問者をみて答えてやれよ。
0222デフォルトの名無しさん
NGNG書き込んだ後そう思った.すいません。
Masu作るときにボードを引数で渡してそれ使う.それかイベント
0223デフォルトの名無しさん
NGNGvoid Hoge( params object [] arg )
の ref バージョンで
void Hoge( ref object arg0 , ref object arg1 , ref object arg2 ... ) ;
の様な物。
必要個数分オーバーロードするしかないかな?
0224デフォルトの名無しさん
NGNG以下のような Panel を継承したクラスをつくりました。
public class PanelEx : System.Windows.Forms.Panel
{
public PanelEx() { }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
Pen p = new Pen(Color.Black, 1);
e.Graphics.DrawRectangle(p, this.ClientRectangle);
p.Dispose();
}
}
この PanelEX クラスのインスタンスを、普通に Form1 の
コンストラクタ内で生成したところ、画面には PanelEx の
左側と上側にしか線がひかれません。
なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
0225デフォルトの名無しさん
NGNGはみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
0226224
NGNGええええー。なぜそんな仕様になってるんでしょうか?
0227デフォルトの名無しさん
NGNG厨避けの為。
0228デフォルトの名無しさん
NGNG別におかしくないよ。
http://www.microsoft.com/japan/msdn/library/ja/jpdnprogwincsharp/htm/chapter15.asp?frame=true
0229デフォルトの名無しさん
NGNGウヒャー
220さんの高度な設計だと、どんな風になるんですか?
コードをつけながら説明してほしい・・・
0230デフォルトの名無しさん
NGNG高度
コード
!?
0231デフォルトの名無しさん
NGNGint i = Console.Read();
Console.WriteLine(i);
これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
0232デフォルトの名無しさん
NGNGコンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。
このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。
んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。
ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、
.Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、
Encoding クラス(のインスタンス)を用います。
0233デフォルトの名無しさん
NGNG"2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGchar c = (char)Console.Read();
とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから
まぎわらしいんだけどね。
0237デフォルトの名無しさん
NGNG今画像のサムネイル保存用に複数画像をまとめてひとつの
ファイルにしようとしています。
Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・
みたいな感じ合成し、インデックスで呼び出そうかと思っています。
で、ふと思ったのですが、そういう複数のファイルをまとめてしまう
クラスって既にあったりするのでしょうか。
よろしければお教えください。よろしくお願いいたします。
0238デフォルトの名無しさん
NGNGBitmap imageB = new Bitmap("B.bmp");
Bitmap imageC = new Bitmap("C.bmp");
Bitmap bmp = new Bitmap(300, 100);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(imageA, 0, 0);
g.DrawImage(imageB, 100, 0);
g.DrawImage(imageC, 200, 0);
g.Dispose();
bmp.Save("ABC.bmp");
bmp.Dispose();
imageA.Dispose();
imageB.Dispose();
imageC.Dispose();
0239デフォルトの名無しさん
NGNGHash的に名前で簡単にストリームを取り出せるような
仕組みが既存クラスにないかなーとか思っていたのでした。
やはり頑張って自分で実装してみます。
ありがとうございました。
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGなるほど!
早速やってみます。
ありがとうございました!
0242デフォルトの名無しさん
NGNGVS.NET2003に反映されないのです。
なんでなんでしょう・・・そういう方他にいますか?
0243最凶VB厨房
NGNG0245最凶VB厨房
NGNGまっわからんけど
0246デフォルトの名無しさん
NGNGフィルタか?
0247242
NGNGフィルタもなしになってます。
本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
0248242
NGNGお騒がせしました。(・∀・)
0249デフォルトの名無しさん
NGNGDirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
0250デフォルトの名無しさん
NGNG変な書き方しちゃいましたね。
2004入れてから日本語ドキュメント入れたら〜でした。スマソ
0251デフォルトの名無しさん
NGNGusing HANDLE=System.IntPtr;using LPVOID=System.IntPtr;using SIZE_T=System.UInt32;using DWORD=System.UInt32;
class CMyApp:System.Windows.Forms.Form
{
[System.Runtime.InteropServices.DllImportAttribute("kernel32")]
static extern LPVOID VirtualAllocEx(HANDLE hProcess,LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect);
DWORD PAGE_READWRITE=0x04;
DWORD MEM_COMMIT= 0x1000;
static void Main()
{
System.Windows.Forms.Application.Run(new CMyApp());
}
CMyApp()
{
this.Click+=new System.EventHandler(OnClick);
}
void OnClick(object sender,System.EventArgs e)
{
LPVOID 自分側の領域=VirtualAllocEx(System.Diagnostics.Process.GetCurrentProcess().Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);
LPVOID 他人側の領域=new LPVOID();
foreach(System.Diagnostics.Process inc in System.Diagnostics.Process.GetProcesses())
if("Explorer"==inc.ProcessName)
他人側の領域=VirtualAllocEx(inc.Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);
System.Runtime.InteropServices.Marshal.PtrToStructure(自分側の領域,typeof(System.TimeSpan));//自分側の領域では例外は発生しない
System.Windows.Forms.MessageBox.Show("次で例外発生");
System.Runtime.InteropServices.Marshal.PtrToStructure(他人側の領域,typeof(System.TimeSpan));
}
}
0252デフォルトの名無しさん
NGNG非Managedなプロセス空間にManagedな構造体を確保する意味がさっぱりわからないんだが。
ttp://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/05/31/14828.aspx
とりあえず外部プロセスへのちょっかいの参照。
■ このスレッドは過去ログ倉庫に格納されています