ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:oeppu08 C# 定数定義
困り度:
  • すぐに回答を!
c#での定数定義についてですが、定数用のclassを定義したのですが
この場合、定数を使用する各classで継承をしなくてはいけないですが、もっといいやり方等があれば教えてください。

public abstract class define
{
public const short NET_BUFF = 1024;
}

class testMain:define
{
    :
    :
質問投稿日時:08/04/10 11:23
質問番号:3937099
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:hofuhofu なにかネットワークに対し送受信を行うようなプログラムを作成しているのでしょうか。

C言語の流儀をそのままC#やJAVAのようなオブジェクト指向言語に持ってこようとすると、クラス設計がいびつになるような気がします。
適当なベースクラスを用意して、実際に送受信を担当するクラスにのみ継承させてはいかがでしょうか。
C#は多重継承を許可していないので、汎化・特化の関係もないものにまで継承させるようにすると、無理が出てきます。
送受信の成否やデータの終了等を判別したいのであれば、担当するクラスに適当なプロパティを持たせるか、戻り値に判別できるような値を返してはいかがでしょう。

abstract class MyStream
{
const short BufferSize = 1024;
abstract char[] Read();
abstract bool EndOfStream { get; }
}

class MyStreamA : MyStream
{
//abstractメンバの実装
}

class MyStreamB : MyStream
{
//abstractメンバの実装
}

MyStream stream = new MyStreamA();
while(!stream.EndOfStream)
{
char[] buf;
buf = stream.Read();
//bufを使った処理
}
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/12 22:57
回答番号:No.3
この回答へのお礼ご回答ありがとうございます。
当方もいろいろ考えてみましたが、どうしてもC言語の考え方をしてしまいます。

やはり、hofuhofu様の様な方法が良いのかもしれません。
まだまだc#初心者ですがいろいろ検証してみたいと思います。

回答

良回答10pt

回答者:sha-girl static public class define
{
public const short NET_BUFF = 1024;
}

class testMain
{
short a = define.NET_BUFF;
    :
    :
でどうですか?
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/04/10 12:14
回答番号:No.2
この回答へのお礼ご回答ありがとうございます。
当方も同じような方法も考えたのですが、

c言語の場合
#deinfe NET_BUFF 1024
short a = NET_BUFF;

c言語のようにNET_BUFFのみにしたいのですがなにかいい方法はないでしょうか。

回答

 

回答者:chie65536 #define NET_BUFF 1024
と書くのが普通。

貴方のコードでは「NET_BUFF」を参照するたびに、イミディエイト値をロードするコードが生成されず、変数から値がロードされるコードが生成される。

また「a = NET_BUFF + 1」とか書くと「変数から1024を取りだし、それに1を加算し、aにストアするコード」が生成される。

それ以前に
  char rcv_buf[NET_BUFF + 1];
って書いた時、コンパイル出来るんだろうか?コンパイルさえ出来ない気がする。

しかも、defineクラスの実体をどこかで生成しなければならず、それもコードが無駄。

もし「プログラミングで給料貰ってる人間」がこんなソース書いたら、上司から「給料半分返すか、それとも明日から永久に会社休むか、どっちが良い?」って言われると思う。

プリプロセッサ命令を1から勉強し直して来て下さい。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/04/10 11:58
回答番号:No.1
この回答へのお礼ご回答ありがとうございます。
初歩的な質問ですが、

c言語の場合
#define NET_BUFF 1024

とするのはわかりますが、c#の場合#defineでシンボルの後に数値等の
定義が出来ないと思うのですがそれは当方の勉強不足なのでしょうか。
 
最新から表示回答順に表示良回答のみ表示