X



ふらっと C#,C♯,C#(初心者用) Part145

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん (ワッチョイ 1e7b-qjLW)
垢版 |
2019/10/07(月) 20:16:17.93ID:9eyAES450
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

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

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0857デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
垢版 |
2019/11/23(土) 22:01:03.42ID:6Id8VYs40
(続き)
そこでさらに次のように改良したところ、無事警告は表示されなくなりました。

class MyStaticClass3
{
  static double HighCostMethod() { ... }

  public static double X = Initialiser.Instance.X;
  public static double Y = Initialiser.Instance.Y;

  class Initialiser
  {
    public static Initialiser Instance = new Initialiser();

    public double X, Y;
    Initialiser()
    {
      var v = HighCostMethod();
      X = Math.Sign(v);
      Y = Math.Abs(v);
    }
  }
}

ただ、クラス初期化時のパフォーマンス上の問題を解消するために
さらに別のクラスを定義するのは本末転倒な気もします。

私のアプローチは正しいのでしょうか。
それとも素直に CA1810 の警告表示を抑制すべきでしょうか。
もしくは、別のもっとスマートな解決策があるのでしょうか。
アドバイス等をいただけると嬉しく思います。よろしくお願いいたします。
0858デフォルトの名無しさん (ワッチョイ 6963-+jxl)
垢版 |
2019/11/23(土) 22:01:38.76ID:gK3OO6AB0
俺自身もthis返す設計に否定的で813で明確に表明してるんだけどねw
850の初期化の例みたいなのもC#ではメソッドに引数名を指定して呼び出すことができる機能があるからそれで事足りる
引数の数が多くなったりオプション引数使えば更に長くなったり呼び出し側も見た目はスマートとは言えないような書き方になったりするんで多用は避けたいところだけど局所的な利用なら無しでは無い気もする
まぁ設定用の構造体作って渡すとかjson等をシリアライズしたものを渡すとかのほうがいいんじゃない?とは思う
0859デフォルトの名無しさん (ワッチョイ 132c-4eZD)
垢版 |
2019/11/23(土) 22:08:25.71ID:fygFNKSM0
>>856
>高コストな HighCostMethod を2回も呼びだすのは無駄なので

典型的なシングルトン。
データベースマネージャーとか、何かを管理するクラスは、基本的に1回しか実行しない

init( ) みたいな、特別な関数でしかnew できない。
通常の方法では、newできないように、エラーになるように作る
0862デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
垢版 |
2019/11/23(土) 22:25:20.74ID:6Id8VYs40
>>859
レスありがとうございます。
おっしゃるとおり、シングルトンを使えば問題は解決するだろうと考えて
作成したのが MyStaticClass3 なのですが、
MyStaticClass3 が MyStaticClass2 よりも
パフォーマンス的に優れていると考えられなくて
質問させていただきました。

> init( ) みたいな、特別な関数でしかnew できない。
> 通常の方法では、newできないように、エラーになるように作る
ここで説明していただいているお話と
MyStaticClass3 の中身の違いがよく理解できていないので
詳しく教えていただけないでしょうか。
よろしくお願いいたします。

>>860
レスありがとうございます。
HighCostMethod()の結果をキャッシュするための装置として
MyStaticClass3.Initializer を作ったつもりなのですが、
改良点などがあればご指摘いただけると幸いです。
よろしくお願いいたします。

>>861
なるほど!レスありがとうございます。
ただ、一時的に値を保持するためにフィールドを使うのは
少し抵抗があるきもするのですが、よく使われる手法なのでしょうか。
また、一つのクラスを複数ファイルに分けて記述できることを考えると、
フィールドの初期化は必ず上から順に行われることが
保証されているのかということについても少し不安があるのですが、
もし何か参考資料などをご存知なら教えていただけると嬉しく思います。
よろしくお願いいたします。
0863デフォルトの名無しさん (ワッチョイ 1301-hZ32)
垢版 |
2019/11/23(土) 22:40:06.43ID:IdTl1qyV0
>>851
そう、そう言う風に純粋に見た目の話をしてるのにチェインメソッドにするしかない(まあ一旦変数に受けりゃいいんだけど流石にそれはねぇ)Linqを出されてもねぇ
Linqをバカにされたとでも思ったのかな?
それはさておき、たしかに同じ変数を何度も書かされるのはなんとなく冗長な感じがするからWith文みたいなのが欲しいのは理解できる
そのうちオブジェクト初期化子でメソッドが呼び出せるようになったりして
var a = new ClassA().Init1().Init2().Init3();
var b = new ClassB().Init(a);

var b = new ClassB(){
 Init(new ClassA(){ Init1(), Init2(), Init3() })
};
0864デフォルトの名無しさん (アウアウウー Sa9d-927E)
垢版 |
2019/11/23(土) 22:41:20.33ID:TBCDcXkja
VS2015だとCA1810 なんか出ないなw
出るとしても警告を抑止して問題ないケースだと思うけど
0867デフォルトの名無しさん (アウアウウー Sa9d-Q1nT)
垢版 |
2019/11/23(土) 22:50:15.57ID:IgdFxqh4a
>>862
「一つのクラスを複数ファイルに分けて記述できること」はpartial classを指していると思うんだけど、その場合はちょっと分からん
ただpartialでない普通のクラスの場合は、初期化は記述順(上から順)に行われることが保証されている
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes#fields
> The static field variable initializers of a class correspond to a sequence of assignments that are executed in the textual order in which they appear in the class declaration
0868デフォルトの名無しさん (アウアウウー Sa9d-927E)
垢版 |
2019/11/23(土) 23:07:33.85ID:TBCDcXkja
これはOKみたい。

static double x;
static double y =
(
  (Func<double>)
  (
    () =>
    {
      var v = HighCostMethod();
      x = Math.Sign(v);
      return Math.Abs(v);
    }
  )
)();

もちろん俺ならこんなことしないw
素直に警告無視or抑止するのが一番いい。
無駄なことして可読性落とすなんて愚の骨頂
0869デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
垢版 |
2019/11/23(土) 23:15:13.03ID:6Id8VYs40
>>864
情報どうもありがとうございます。
Visual Studio のバージョンに依存する話だったのですね。
私は Visual Studio 2019 (Version 16.3.10) を使っています。
情報が後出しになってしまい失礼いたしました。

> 出るとしても警告を抑止して問題ないケースだと思うけど
ご意見ありがとうございます。 >>856 に貼り付けたリンクの先にも
「パフォーマンスが問題にならない場合は、このルールの警告を抑制しても安全です。」
と書いてありますし、やはり抑制が最善の方法であるような気もしてきました。

>>865
> プロパティ
アドバイスどうもありがとうございます。
string.Empty の様に、プロパティである必要がないものは
フィールドにしたほうがパフォーマンス的に有利かと思って
そのようにしていたのですが、確かにプロパティが一番真っ当ですね。

> Lazy<T>
ありがとうございます。ただ、私の考える限り以下のような方法しが思いつかず、
だったら >>861 に書いていただいたもので良いのではと思ってしまうのですが、
もし Lazy<T> を使った別の方法があれば詳しく教えていただけると嬉しく思います。
static Lazy<double> Cache = new Lazy<double>(HighCostMethod);
public static double X = Math.Sign(Cache.Value);
public static double Y = Math.Abs(Cache.Value);
0870デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
垢版 |
2019/11/23(土) 23:15:35.51ID:6Id8VYs40
>>867
おお!情報どうもありがとうございます。大変勉強になります。
そうであるなら、Cache のフィールドが残ることが気にならないか、
もしくは Cache も後々使うなら >>861 に書いていただいた方法が
最善になりそうですね。

>>864
なるほどw 警告も万能ではないとういことですね。
説得力のある面白い例を示していただきどうもありがとうございます。
0873デフォルトの名無しさん (アウアウウー Sa9d-927E)
垢版 |
2019/11/23(土) 23:25:48.76ID:TBCDcXkja
>>871
CA1810のページによると、staticフィールドの初期化はいずれかのstaticフィールドに
最初にアクセスされる前に行われるとなってるから、それはないのでは?

知らんけど
0874デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
垢版 |
2019/11/23(土) 23:40:24.93ID:6Id8VYs40
>>872
サンプルを書いてくださっていたのですね。大変失礼いたしました。
ただ、やはり Lazy<T> を使うメリットが理解できずにいます。
MyStatic が初期化される時点で _highCost が初期化されて、
その後すぐに _highCost.Value が呼び出されるのであれば、
>>861 に書いていただいた方法で十分な気がするのです。

>>873
おっしゃるとおりだとおもいます。
ところで少し考えてみて、場合によっては冗談ではなく

public static double X, Y = InitializeYAndX();
static double InitializeYAndX()
{
  var v = HighCostMethod();
  X = Math.Sign(v);
  return Math.Abs(v);
}

みたいな書き方が選択肢になり得ることもあるような気がしてきました。
もしくは、実際にはフィールドは readonly にしたい場合が多いと思うので

public static readonly double X, Y = InitializeYAndX(out X);
static double InitializeYAndX(out double x)
{
  var v = HighCostMethod();
  x = Math.Sign(v);
  return Math.Abs(v);
}

のような感じとか。
0875デフォルトの名無しさん (ワッチョイ 6963-+jxl)
垢版 |
2019/11/24(日) 00:02:41.75ID:kdnOmkRS0
>>874
個人的に警告を回避するために普段しない書き方をするのは違うと思う
警告の内容を理解し、それが今回のケースでは問題ないと判断できるなら遠慮なく警告を抑制していいと思う

プログラム起動時に自動的に初期化されるstaticとプログラマが初期化タイミングを制御できるsingleton
起動コストが問題なくてstaticが妥当なら警告抑制を選択するかな
0876デフォルトの名無しさん (ワッチョイ 9301-wiXz)
垢版 |
2019/11/24(日) 00:02:47.40ID:ajYX9vGJ0
>>874
LowCostMethodも追加してみた
https://dotnetfiddle.net/Be6wMy

名前の通りLazy LoadingとかLazy Initializationとかいうのをするためのもので
必要になった時に初期化されてなければ初期化して、初期化済みなら初期化済みの値を使う
MyStaticクラスが初期化される時点で_highCostが初期化されるわけではない

getプロパティで
if ( cache == null ) { cache = HighCostMethod(); }
return cache;
するのと意味的には同じでdefaultでthread-safe
詳しくは>>862の2つ目のリンクに書いてある

あともし他人も使うコードなら潜在的に高コストな処理は
フィールドやプロパティじゃなくメソッドにしといたほうが無難
0877デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
垢版 |
2019/11/24(日) 00:26:34.20ID:ilfNxwrd0
>>875
> 個人的に警告を回避するために普段しない書き方をするのは違うと思う
> 警告の内容を理解し、それが今回のケースでは問題ないと判断できるなら遠慮なく警告を抑制していいと思う
アドバイスどうもありがとうございます。確かにおっしゃるとおりですね。
この考え方で、警告を抑制する方向で行こうと思います。

> プログラム起動時に自動的に初期化されるstaticとプログラマが初期化タイミングを制御できるsingleton
static はプログラム起動時に初期化されるんでしたっけ?
ただいずれにしても、コストが非常に高い場合は
明示的に初期化のタイミングを指定できるように気をつけたいと思います。

>>876
詳しいご説明ありがとうございます。
「MyStatic が初期化される時点で _highCost が初期化されて」
という表現は正しくありませんでした。失礼いたしました。

ただ、お書きいただいたコードでは
private static readonly Lazy<double> _highCost = new Lazy<double>(HighCostMethod);
の直後に
public static double X = Math.Sin(_highCost.Value);
public static double Y = Math.Abs(_highCost.Value);
が実行されるので、例えば
private static readonly double _highCost = HighCostMethod();

public static double X = Math.Sin(_highCost);
public static double Y = Math.Abs(_highCost);
に書き換えても同じではないでしょうか?

> あともし他人も使うコードなら潜在的に高コストな処理は
> フィールドやプロパティじゃなくメソッドにしといたほうが無難
アドバイスどうもありがとうございます。言われてみて、確かにそのとおりだと思いました。
コストの高さに応じて適切な書き方が選択できるように勉強したいと思います。
0879デフォルトの名無しさん (アウアウウー Sa9d-927E)
垢版 |
2019/11/24(日) 02:24:11.12ID:8mt5PJRXa
もう誰かとっくに書いてるだろうけど、やっぱり本来は重くなる可能性があるなら
フィールドやプロパティーじゃなくてメソッドにすべきなんだろうね。知らんけど

static double _x, _y;
static Action InitializeXY = () =>
{
  var v = HighCostMethod();
  _x = Math.Sign(v);
  _y = Math.Abs(v); ;
  InitializeXY = null;
};

public static double GetX()
{
  InitializeXY?.Invoke();
  return _x;
}
0883デフォルトの名無しさん (アウアウウー Sa9d-5f43)
垢版 |
2019/11/24(日) 10:25:13.16ID:0nk530rxa
大原則?
オブジェクト指向の原理主義的にはそもそもgetterを作るべきではないんだよ
getterを使うのは上司がタバコを吸いたいときに不器用な部下にしびれを切らして「お前、もういいからお前のライター寄越せ」
と言っているようなもので、オブジェクトから本来担うべき責務を剥ぎ取ってしまっている
火をつけろと命令を投げっぱなしにしておけば勝手に火をつけてくれるのが本来のオブジェクト指向の姿
0891デフォルトの名無しさん (ワイーワ2 FF63-KqLj)
垢版 |
2019/11/25(月) 14:22:13.25ID:pjJuONFZF
負の数混ぜてないか
0892デフォルトの名無しさん (ワッチョイ d901-QS5Z)
垢版 |
2019/11/26(火) 16:49:39.39ID:/t5k7Bse0
フォルダファイルの情報集めてデータベース作りたいんですけど
データベースの種類って何がいいのかな?
3万件ぐらいのレコード、外部に持っていくこともしない
よろちしおねがいします
0897デフォルトの名無しさん (オッペケ Src5-BEIG)
垢版 |
2019/11/26(火) 17:53:20.38ID:GH1P3tUMr
linuxにはlocateコマンドと言うものがあってファイルを高速に検索できる
これはただあらかじめフルパスのファイル名を全部取っておいて一つのテキストファイルにまとめてあるだけ

用途次第で最適な方法は異なる
0899デフォルトの名無しさん (ワッチョイ d901-QS5Z)
垢版 |
2019/11/26(火) 23:01:40.76ID:/t5k7Bse0
>>893
Redisなんてゆうデータベースあるんですね、一般的なのかな
さんくすしらべてみます
>>895
サンクスsqliteよく使われてますよね昔から
今でも普通に使われてるのかな?

>>894>>896-897
何がしたいのかとゆうと、外付けHDDの中身を書き出したい的な事がしたいのです
高性能なフリーウェアがあるとしても、自分でつくりたいのれす
0900デフォルトの名無しさん (ワッチョイ 6963-+jxl)
垢版 |
2019/11/26(火) 23:55:29.19ID:Rjqqllka0
いや、知りたいのはその書き出したファイル情報をどうしたいのか?なんだけど…
自分で作りたいというのが勉強を兼ねてるならsqliteとかでひとまず慣れるのが良いんじゃない?
0901デフォルトの名無しさん (ワッチョイ 9138-4UII)
垢版 |
2019/11/27(水) 00:05:09.92ID:a5fnDquJ0
教会作るのか扉作ってるのか木を切ってるのかっつー話よな

それはさておき
お手軽に使えるのはSQLiteでライブラリやマッパーも豊富
redisは高速でwebクラウド周りでは結構ちやほやされた
けどRDBとNoSQLの区別付いてるかは心配やな

外付けHDDの中身…か…
0903デフォルトの名無しさん (ワッチョイ d901-QS5Z)
垢版 |
2019/11/27(水) 11:14:29.53ID:TFRzaUoP0
>>900
さんくす、SQlite?そんなの古くて誰も使ってないよ?みたいな状態が怖い
>>901
さんくす、とりあえず椅子を作りたい、用途に多少合わなくても使えるから
簡単な検索、重複ファイルの処理とか?
速度は遅くていいので、簡単で扱いやすいのがいいでつね
RDBで作ろうとおもってます
>>902
そんな感じになりそう、さすがにテキストファイルは作らないけど

sqlite使ってみようと思いますが、Microsoft SQL Serverってどうなんでしょう?
定番なんでしょうか?それとも難しいとか使いにくいとか
0904デフォルトの名無しさん (アウアウウー Sa9d-xPlI)
垢版 |
2019/11/27(水) 11:29:33.07ID:IQPQs9eCa
>>903
sqliteはローカルで閉じたお手軽DBとしてはまだまだ現役よ。ローカルDBのデファクトスタンダードと言っていいぐらい。
クライアントサーバのようなシステム作りたいなら不向きだけど。
0906デフォルトの名無しさん (ワッチョイ 7190-HqzV)
垢版 |
2019/11/27(水) 12:04:05.91ID:DM2fL27g0
sqliteは組み込みDBではメジャーだろ。androidアプリの標準ローカルDBがsqliteだし。iosのcoredbだって内部はsqlite使ってるだろ?
モバイルアプリでsqlite使われまくりだろ。

まぁ、最近はrealmだのあるが
0910デフォルトの名無しさん (ワッチョイ 9138-4UII)
垢版 |
2019/11/27(水) 15:28:58.26ID:a5fnDquJ0
>>903
win環境ならSQL Serverは最有力選択肢だよ
C#前提ならVisualStudioとも統合されてるし、簡単に扱えるので取り回しもしやすくて情報も多い

気になるのはやろうとしてることに対して、若干大げさな構成かなという点かな
RDBの経験積みたいのが目的に含まれるなら全然アリよ
0911デフォルトの名無しさん (オッペケ Src5-/L9V)
垢版 |
2019/11/27(水) 17:33:31.24ID:0UC6xAmXr
インストールとかもSQLServerのインストールと設定込みになるから大げさだよ
インストール先でSQLserverの管理も必要になる(セキュリティーホールに対するアップデートなど)

sqliteがいいと思うよ
0914デフォルトの名無しさん (ワッチョイ d901-QS5Z)
垢版 |
2019/11/27(水) 22:24:42.73ID:TFRzaUoP0
>>904
さんくすです、現役なら今から勉強しても無駄にはならなそうですね
>>905
Microsoftはたまに、それ誰得よってのがあるから怖い
>>906
さんくす、androidに使われてたらしばらく安泰でつね
>>908
ちょと調べてみたけど、きびしい、頭の片隅に
>>910,912
さんくす、SQLServerも間違ってはいないのですね
DB使うまでもなくオーバスペックっぽいけど、練習になるから
>911
導入がメンドイのと保守もいると、さんくすね
>909
firefoxで使ってるのみました、でもFFは設計古いままきてるからどうなのかなって
>913
VisualStudioにsqliteいれといてくれたらいいのにね

みなさんさんくす、現在のDBの立ち位置がわかって、方向性がだいたい決まりました
まずはsqlite導入してみようかな
0915デフォルトの名無しさん (エムゾネ FFb2-Qbqw)
垢版 |
2019/11/28(木) 15:03:25.97ID:1U78x1XWF
SQLiteって導入するほどのもんでもない
っていうか導入とかせんでも使えるし
0922デフォルトの名無しさん (ドコグロ MM71-MhVQ)
垢版 |
2019/11/28(木) 19:31:57.14ID:jLfyQeMzM
>>914
> VisualStudioにsqliteいれといてくれたらいいのにね
2019は知らんけど2017はVisual Studioのインストール時にSQL-Server LocalDBを入れるかどうかを聞いてきたような気がする
LocalDBは外部からの接続できないだけで中身はほとんどSQL-Server
Visual Studioからテーブル開いてデータを弄ることもできるしそこそこ便利よ
0930デフォルトの名無しさん (ワッチョイ f538-CTFU)
垢版 |
2019/11/28(木) 23:52:03.59ID:A6hZkiU20
>>927
nugetを入れると言う以前にVS使ってソリューションて作るとすぐ使える状態にあるし

SQLiteを始めとして外部ライブラリを導入するならnuget使うのはc#では基本ツールと言えるので、使えたほうが良い
パッケージ管理にnugetが最適かは置いておくとして
0933デフォルトの名無しさん (ワッチョイ 9242-3RYV)
垢版 |
2019/11/29(金) 08:44:50.30ID:k2xfmaZa0
sqliteやるとして、Dapperを使うかEF使うかは意見が分かれるところだね
ついでにSQLから始めるってことでDapperをお薦めしますが
EFはSQLを知らなくてもなんとかなるが、そのうち壁にぶち当たるだろうからね
0934デフォルトの名無しさん (アウアウウー Sacd-e3ak)
垢版 |
2019/11/29(金) 08:52:58.95ID:buffyidfa
SQLiteとEFの組み合わせはテスト専用だ
EFはサーバー用のフレームワークなのでSQLiteを使うようなスタンドアロンなアプリで使用されることは基本的にないし、
EFなんか被せたら軽量なSQLiteが台無し
0935デフォルトの名無しさん (アウウィフ FFcd-Qbqw)
垢版 |
2019/11/29(金) 12:06:03.16ID:N/f9f1S7F
SQL-Server Local DB って MSDE のこととちゃうんけ
0938デフォルトの名無しさん (アウウィフ FFcd-Qbqw)
垢版 |
2019/11/29(金) 12:30:30.51ID:N/f9f1S7F
間違ってなくて安心した
0940デフォルトの名無しさん (アウウィフ FFcd-Qbqw)
垢版 |
2019/11/29(金) 13:03:59.73ID:N/f9f1S7F
ありがとう
SQLite とは関係無いことは判った
SQLite の簡単さとは比べ物にならない
0942デフォルトの名無しさん (ドコグロ MM71-MhVQ)
垢版 |
2019/11/29(金) 19:40:54.65ID:/qBs46JEM
>>939
> Local DBはそれとインターフェイス互換性を持たせた別製品
> ExpressとCompactのあいのこみたいなもの
お前もテキトーなこと書くなよw
LocalDBはエンジンはExpressとほぼ同じで外部からの接続ができないだけ
Compactは全く別物で使えるSQLも異なる
0949デフォルトの名無しさん (ワッチョイ 0901-R3ru)
垢版 |
2019/11/29(金) 23:16:39.14ID:Z1Tig2XP0
>>930
さんくす、Nugetすごく簡単だねえ、ただ多すぎて迷う、coreにしてみた
>>931
わざわざさんくすね、LocalDBも入れてみるお
>>933
Dapperとゆう新たな単語が、、頭の片隅に

他の人もサンクス、あとは勉強してコード書くだけだね
0952デフォルトの名無しさん (ワッチョイ 0d7d-nO0S)
垢版 |
2019/12/01(日) 16:07:57.01ID:r7b9vkne0
ASP.NET Webフォームでオブジェクト指向な作りって出来ますか?Pageクラスを継承した画面ごとのクラスが基本となると思うんですが、それらとは別にドメインオブジェクトを定義すればいいんでしょうか?
古いフレームワークのせいか、参考になる情報がWeb上で見つからず困っています
0956デフォルトの名無しさん (アウウィフ FFcd-Qbqw)
垢版 |
2019/12/01(日) 17:30:22.41ID:zxgavQqmF
mdb は Access 無くても作れるし使える
wsh からも作れるし
python からでも win32com とか adodb とかで生成も操作も可能
レス数が950を超えています。1000を超えると書き込みができなくなります。

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