C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#における疑似グローバル関数の配列について


(過去ログ 77 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■45658 / inTopicNo.1)  C#における疑似グローバル関数の配列について
  
□投稿者/ とんこつ (5回)-(2010/01/18(Mon) 13:43:19)

分類:[C#] 

こんにちは、とんこつと申します。
環境はWindowsXp VS2008です。
質問はC#における疑似グローバル関数の配列についてです。

C#はグローバル関数をサポートしてないと聞き、それを実現するために、

public class thumbnail
{
 public static string oktitle { get; set; }
}

といったように、public staticによって、疑似グローバル関数のようにつかっているのですが、
これを

public class thumbnail
{
 public static string[] oktitle { get; set; }
}

のように、配列として宣言、扱うことはできないのでしょうか。

試しに配列のように宣言して試しに値をいれるだけのプログラムを作ってみましたが
初期化のところでエラーが発生してしまい、うまく動作させることができませんでした。

上記のように宣言することはできないのでしょうか?
できるのならば、使用するための初期化はどのように宣言すればよいのでしょうか?

失礼いたします。



引用返信 編集キー/
■45660 / inTopicNo.2)  Re[1]: C#における疑似グローバル関数の配列について
□投稿者/ aetos (212回)-(2010/01/18(Mon) 14:11:56)
No45658 (とんこつ さん) に返信
> public class thumbnail
> {
>  public static string[] oktitle { get; set; }
> }
>
> のように、配列として宣言、扱うことはできないのでしょうか。

これは戻り値の型が string の配列になっています。
おそらくそれは意図した挙動ではないのでしょう。

「何を」配列にしたいのですか?
引用返信 編集キー/
■45666 / inTopicNo.3)  Re[2]: C#における疑似グローバル関数の配列について
□投稿者/ επιστημη (2393回)-(2010/01/18(Mon) 16:15:36)
επιστημη さんの Web サイト
2010/01/18(Mon) 16:29:10 編集(投稿者)
↓...こゆこと?

public class Global {

  private static string[] array = new string[10];
  public string this[int index] {
    get { return array[index]; }
    set { array[index] = value; }
  }

  public static void Main() {
    { // せったー
      Global g0 = new Global();
      g0[0] = "hello";
    }
    { // げったー
      Global g1 = new Global();
      System.Console.WriteLine(g1[0]);
    }
  }
}

# グローバルやめようよー ロクなことないからー

引用返信 編集キー/
■45677 / inTopicNo.4)  Re[2]: C#における疑似グローバル関数の配列について
□投稿者/ とんこつ (6回)-(2010/01/18(Mon) 19:11:53)
No45660 (aetos さん) に返信
aetosさん返信ありがとうございます。

当方、初心者のため的外れなことを言ってるかもしれませんがすいません。

やりたいと考えていることは、
thumbnail.oktitle[0]
thumbnail.oktitle[1]
thumbnail.oktitle[2]

    ・
    ・
に、string型の値を代入し、グローバル関数のようにどこからでもその値を参照できるようにしたいのです。

aetosさんの指摘によると戻り値がstringの「配列」になっているのがいけないのでは?
と受け取ったのですが、そうすると
戻り値に別の、配列でない型を宣言すればよいのでしょうか?

すいません、ちゃんとした返信になっているでしょうか?^^;


> ■No45658 (とんこつ さん) に返信
>> public class thumbnail
>> {
>>  public static string[] oktitle { get; set; }
>> }
>>
>>のように、配列として宣言、扱うことはできないのでしょうか。
>
> これは戻り値の型が string の配列になっています。
> おそらくそれは意図した挙動ではないのでしょう。
>
> 「何を」配列にしたいのですか?
引用返信 編集キー/
■45685 / inTopicNo.5)  Re[3]: C#における疑似グローバル関数の配列について
□投稿者/ よねKEN (434回)-(2010/01/18(Mon) 22:00:39)
No45677 (とんこつ さん) に返信
> やりたいと考えていることは、
> thumbnail.oktitle[0]
> thumbnail.oktitle[1]
> thumbnail.oktitle[2]
> ・
>     ・
>     ・
> に、string型の値を代入し、グローバル関数のようにどこからでもその値を参照できるようにしたいのです。

提示のコードはあっていますので、そのグローバルな配列を使おうとしている箇所の問題かと思います。

使う前に、どこかで
thumbnail.oktitle = new string[10]; // 10は適当な数字

のように配列を確保(初期化)していますか?おそらく初期化をしないで
いきなり配列の要素に対して設定または取得をしようとしているのでは?

引用返信 編集キー/
■45708 / inTopicNo.6)  Re[3]: C#における疑似グローバル関数の配列について
□投稿者/ ななし (4回)-(2010/01/19(Tue) 09:43:17)
No45677 (とんこつ さん) に返信

初期化でエラーが発生したとのことですが、もしかして次のように書かれたんじゃないですか?

public class thumbnail
{
 public static string[] oktitle { get; set; } = new string[100];
}

{ get; set; } という書き方は、「自動プロパティ」を意味します。
自動プロパティに対しては、残念ながら上記のように初期化コードを宣言的に書くことはできません。

初期化の方法としては、次の4つの方針があります。

1.使う側で初期化
thumbnail.oktitle = new string[100];
thumbnail.oktitle[0] = "test";
MessageBox.Show(thumbnail.oktitle[0]);

2.静的コンストラクタで初期化
public static class thumbnail
{
 static thumbnail()
 {
  oktitle = new string[100];
 }
 public static string[] oktitle { get; private set; };
}

3.自動プロパティにしない
public static class thumbnail
{
 private static string[] _oktitle = new string[100];
 public static string[] oktitle
 {
  get { return _oktitle; }
  //set { _oktitle = value; }
 };
}

4.プロパティにさえしない
public static class thumbnail
{
 public static readonly string[] oktitle = new string[100];
}

上記の1以外では、一応、配列インスタンス自体のセットはできないようにしました。
また、このような場合には、上記のようにクラスにも static を付けることをお勧めします。
さらに、本当にグローバル的に扱う必要があるかどうかについても、再検討されることを強くお勧めします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -