X



ふらっと C#,C♯,C#(初心者用) Part140
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 9e9f-LwdJ)
垢版 |
2018/10/04(木) 18:56:38.41ID:JnxMNCXd0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1533466544/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0718デフォルトの名無しさん (スププ Sdba-aHfj)
垢版 |
2018/11/30(金) 21:33:39.29ID:7tGVT0o8d
math.powでなくfor使ってa^b乗はどうやったらうまくいきます?
0721デフォルトの名無しさん (スププ Sdba-aHfj)
垢版 |
2018/11/30(金) 22:17:19.14ID:n5lF99wkd
天才あざす
0722 ◆QZaw55cn4c (ワッチョイ ba60-4R1R)
垢版 |
2018/11/30(金) 23:14:00.97ID:MkfLpznc0
>>717
wav ファイルの波形パターンを取り出してプログラムで適当に加工したあと win32api に渡すと音がなる、とかできるのでしょうか?API関数名はなんですか?
0726デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
垢版 |
2018/12/01(土) 15:10:50.09ID:BBiFvNwv0
For文でTaskの配列を使いたいんだけど

var task=new Task[10];
for(int i=0;i<10;++i)
{
int j=i; ←これ
task[i]=Task.Run(()=>{なんかjを使う処理;});
}

こんな風に変数の置き換えをしなきゃいけないのを処理する
なんか別のカッコいい方法ってありますか?
0730デフォルトの名無しさん (ブーイモ MMba-D04G)
垢版 |
2018/12/01(土) 17:03:32.28ID:q6i9ekrsM
>>728
残念ながら君より質問者のほうがC#をよく理解している
俺も727派だけど、別解としては for じゃなくて foreach (var i = Enumerable.Range( なら i をラムダ内でそのまま使っても問題ないよ(C#5以降)
0731デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/01(土) 17:04:04.70ID:QCT+flDQ0
static void Main()
{
Console.WriteLine("Begin");
var tasks = new []
{
Task.Factory.StartNew(() => Console.WriteLine("Task1 is running")),
Task.Factory.StartNew(() => Console.WriteLine("Task2 is running")),
Task.Factory.StartNew(() => Console.WriteLine("Task3 is running")),
};
int index = Task.WaitAny(tasks);
Console.WriteLine("Index = {0}", index);
Console.WriteLine("End");
}
}
New[]ってなに?
0733デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/01(土) 17:16:05.12ID:QCT+flDQ0
ああそいうことなの、ありがとう。推論しすぎだよ。W
0734デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/01(土) 17:21:20.93ID:QCT+flDQ0
tasks Newしてるのにスタートしてないのも推論?
0736デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
垢版 |
2018/12/01(土) 18:50:52.76ID:4Hpcan/K0
便乗で低レベルな質問してすまんが、なんでこれの実行結果って10のみになるの?
なんか0〜9の10行になりそうな気がしちゃったんだけど・・・・どうして!?

using System;
using System.Threading;
using System.Threading.Tasks;

public class Test
{
public static void Main()
{
var task = new Task[10];
for(int i=0;i<10;i++)
{
task[i]=Task.Run(()=>Console.WriteLine(i));
}
}
}
0737デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
垢版 |
2018/12/01(土) 18:58:25.70ID:4Hpcan/K0
たまたまメインスレッドで動いたやつだけConsole.WriteLineが動くとかそういうのなのかな?
0740デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
垢版 |
2018/12/01(土) 21:00:00.35ID:4Hpcan/K0
ありがとう!なんで10になるのかはわかったよ
ただ次になぜ10が10個並んじゃわないのかが全然わかんなくなってきたぜ・・・・
0742デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
垢版 |
2018/12/01(土) 22:13:11.50ID:4Hpcan/K0
>>741
forループ中にTaskが開始されるとなぜ1つになっちゃうのか全然わからなんだ・・・・
0743デフォルトの名無しさん (ワッチョイ 8a7e-o5Pc)
垢版 |
2018/12/01(土) 22:53:47.54ID:THW+jwSM0
メインスレッドが即座に終了して出力なしの方がザラだと思うが
明示的に待たないとTaskの完了など知った事ではないよ

というか徒に増やした所でメモリ帯域とかで躓くのがオチ
Taskは非同期だし、並列実行が望みならGPGPUなりを…
0745デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
垢版 |
2018/12/01(土) 23:13:24.31ID:BBiFvNwv0
>>727-730
ありがとうございました。いい方法あったんですね
そろい踏みで
var task = new Task[10];
for (int i = 0; i < 10; i++)
{ int j = i; task[i] = Task.Run(() => Console.WriteLine("a={0}", j)); }

var tasks = Enumerable.Range(0, 10).Select(i => Task.Run(() => {Console.WriteLine("b={0}",i);})).ToArray();

var task2 = new Task[10];
for (int i = 0; i < 10; i++)
{ task2[i] = Task.Run(() => Console.WriteLine("c={0}", i)); }

foreach (var i in Enumerable.Range(0, 10)) { Console.WriteLine("d={0}", i); }

Console.ReadKey();

で何回か試してみると、foreachだけは必ずタスクの起動順が順番通りで揃うんですね
ちょっとこれを使ってみます
0755デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
垢版 |
2018/12/02(日) 09:05:24.28ID:VRa40hbi0
ラムダ式って
void method()
{
int x = 1;
int y = 10;
Action a = () => {Console.WriteLine( x + y); };
a.Invoke();
x += 100;
a.Invoke();
}
こうやってメソッド内に導入した瞬間にこのメソッドが
class クラス名が非表示のクラス
{
int x;
int y;
void a()
{
Console.WriteLine(this.x + this.y);
}
public void method()
{
this.x = 1;
this.y = 10;
a();
this.x+=100;
a();
}
}
みたいに勝手にクラス化されて変数が内部でフィールド扱いになるって理解でいい?
0760デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
垢版 |
2018/12/02(日) 15:05:44.53ID:1mt10vUo0
質問です
staticなclassに機密情報を保持してプロジェクト内のすべてのコードから参照して利用できるようにしたいです
その場合、改竄を防ぐために決められた場所(コード)からしかsetできないようにしたいですがどうすればいいでしょうか?
また他プロセスからのメモリ改竄はどのように対策をすればいいでしょうか?
0762デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
垢版 |
2018/12/02(日) 15:26:44.53ID:1mt10vUo0
>>761
書き込みじゃありません保持です
具体的には受け取った値をメモリ上に置いてそれを各所で参照します
0764デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
垢版 |
2018/12/02(日) 15:49:14.43ID:1mt10vUo0
>>763
情報ありがとうございます
さっそく調べてみます
0766デフォルトの名無しさん (ワッチョイ dbb8-C0zt)
垢版 |
2018/12/02(日) 15:55:38.27ID:yai2DppL0
メモリを直接書き換えてくるような攻撃だとアクセス修飾子なんて一切関係なく書き換えられるし、そもそもその後のif文自体を書き換えたりとかしてくるから一定レベル以上の攻撃は防げない
とりあえずxor暗号程度で保持しとくとかは?
get => 機密情報 ^ 0x01234567;
set => 機密情報 = value ^ 0x01234567;
0768デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
垢版 |
2018/12/02(日) 16:00:32.72ID:1mt10vUo0
>>765
>>766
>>767
ありがとうございます
参考にさせていただきます
0781デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/03(月) 14:27:17.52ID:1qcFF+t30
ClassA,ClassB,,,のインスタンスをJsonで保存したい。

Class Ihozon{
void init(){} //変数を初期化
string serialize(ClassA str){ }
ClassA deserialize( string json){ }
}
というインターフェースを作って保存処理は共通化したいと思うのだが、Serializeするのにクラス名の
引数が必要になるので共通化できない。こういう場合どうしたらいいの?
0782デフォルトの名無しさん (アウアウエー Sa52-70Pl)
垢版 |
2018/12/03(月) 15:09:15.55ID:kXdIrz5+a
>>781
ちょっと何言ってるのかよく分からないところがあるので
勘違いかもしれないけど、普通にジェネリックメソッドにするだけじゃないの?

public static string JsonSerialize<T>(T obj) {...}
public static T JsonDeserialize<T>(string json) {...}
0783デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/03(月) 15:51:51.32ID:1qcFF+t30
jeneric interface をつかったらいいんだね。できました。ありがとう。
0784デフォルトの名無しさん (ササクッテロレ Sp3b-QMby)
垢版 |
2018/12/03(月) 16:33:19.27ID:k9BWMLgHp
インスタンスを保存して何か良い事あるのか?
言葉の違いなだけならいいが…クラス内の値を保存するんだよな?
クラスのある位置を示すポインタを保存するんじゃないんだよな?
0786デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/03(月) 17:31:56.17ID:1qcFF+t30
public interface Ijson<T> {
T deserialize(string json);
string serialize(T js);
void init();
}
public class ClassA : Ijson<ClassA>
{ }
ClassAをシリアライズしたいのだけでど、Interfaseするんはわかったんだが内部に
つねに class ClassFile{ void FileSave() {} void FileLoad(){} } を継承もしたい。
(中が固定なのでいちいち実装したくない)
ClassA A = new ClassA();
A.FileLoad(); // これでAはファイルデータで初期化したい。
継承とinterfaceを同時にやるってどうやるの?
0787デフォルトの名無しさん (スプッッ Sd5a-VqKd)
垢版 |
2018/12/03(月) 17:49:03.84ID:PYYWjLDMd
System.Web.Mail.MailMessageクラスのFieldプロパティでCDOのFieldを追加してました。

System.Webは古いからSystem.Net.Mailを使えと警告が出るので置き換えようとしてみたところ、対応する方法が見つかりませんでした。
ご存知の方いないでしょうか。
0788デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/03(月) 18:01:20.51ID:1qcFF+t30
>>786
自己解決:Interfaseやめてジェネリックのクラス使えばできました。
0789デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/03(月) 21:15:19.45ID:1qcFF+t30
別のプロジェクトからCopy してきた Form1をNameSpace名をこのプロジェクトに
あわせて
var fm = new Form1();
fm.ShowDialg();
とやっても、空のフォームが立ち上がる。なぜなんだろう?
0792デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/04(火) 04:22:30.94ID:16QpsEK/0
>>790
ありがとう。解決しました。
InitializeCompornent();の呼び出しが消えていた。
なんでだろ。消した覚えはないんだけど。
0793デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/04(火) 04:55:27.00ID:16QpsEK/0
>>791
interfaceを使えないかトライしてみましたが、どうもうまく行かないです。
ClassFileはIjsonをインターフェースする必要があって、Ijsonのinit()はClassAのプロパティや
変数の初期化なのでClassAの中でしか実装できません。なので
ClassFile:Ijson<ClassA>
ClassA:ClassFile<ClassA>
のような構成になります。しかし問題があります。
問題:ClassFileの中ではinit()は実装したくないのに、実装を余儀なくされるが、初期化したい変数は
ClassAの中にあるので困る。
0794デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/04(火) 05:04:31.89ID:16QpsEK/0
clsAのインスタンスに代入する方法ってこれでいいのでしょうか?
public class clsA: clsJson <clsA>
{
public void ParamLoad() {
clsGamenParam v = this;
v = base.ParamLoad();
}
}

public class clsJson<T>{
public T ParamLoad(string IniName = "") {
T param = default (T);
param = deserialize(json);
return param;
}
}
0802デフォルトの名無しさん (アウアウエー Sa52-70Pl)
垢版 |
2018/12/04(火) 23:34:36.38ID:S3l73Gw8a
>>798
円や直線みたいな単純な図形でアンチエイリアスとかも不要なら
確かVBer向けのシェイプコントロールってのがあったはずだから、それを使えば一発だね
http://www.atmarkit.co.jp/fdotnet/dotnettips/781winlineshape/winlineshape.html
描画するんじゃなくて子コントロールを加える形になると思うけど
0803デフォルトの名無しさん (スプッッ Sd5a-KXwy)
垢版 |
2018/12/05(水) 13:01:06.99ID:6cU8181gd
シングルトンパターン実装が面倒だからstatic実装をしてしまう私は雑魚なのでしょうか
いつインスタンスが作られるかぐらいの差しかないんじゃないのぉぉぉお起動時に一度だけ呼ぶ使われ方ならぁぁぁあ
0805デフォルトの名無しさん (ブーイモ MMba-D04G)
垢版 |
2018/12/05(水) 13:24:54.14ID:mkn+H/81M
>>803
グローバル変数を作る目的でシングルトンにするくらいなら、Globalクラスでも作ってそのstaticフィールドとして持たせて共有したほうがマシ
シングルトンが用いられる大抵のケースでは、アプリでクラスAのインスタンスが一つしか必要とされないという要件を、
誤ってクラスA側に持ち込んでしまい不必要な制限をクラスAに対して与えている
基本的にシングルトンはアンチパターンであり、使うべきではないと考えておけばいい
0812デフォルトの名無しさん (ワッチョイ abeb-3M3s)
垢版 |
2018/12/06(木) 17:22:48.54ID:PXx1OaoO0
そういやDIコンテナってどういう仕組みになってんのか全然わからん
コンストラクタの引数をインターフェイスにするだけで、登録済みのオブジェクトを自動的に注入してくれるわけだけど・・・・
あれってコンストラクタの呼び出し側は一体どんな仕組みになってるの?
そもそも引数のインターフェースを増やそうが減らそうがコンパイルエラーが起きないって、呼び出す側は一体どうなってるのかしら
0814デフォルトの名無しさん (ワッチョイ abeb-3M3s)
垢版 |
2018/12/06(木) 17:45:26.67ID:PXx1OaoO0
>>813
ありがとう
リフレクションは全然使ってなかったので勉強してくるよ
0815デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/06(木) 23:07:45.72ID:LqRlvnk/0
リフレションとかバカしか使わないわ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況