[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10884] Re: インターフェ ースについて



 --- Kazuya Maebashi <PXU00211@xxxxxxxxxxx> からのメッセージ:
> 前橋です。
> 
> 村山@netgeneさん:
> >余談ですが
> >C#の場合staticフィールドはインスタンス変数から参照できません。
> >例:
> >--C#--
> >public class Hoge{
> >  public static String TABLE_NAME = "hoge";
> >}
> >public class Test{
> >  public static void main(String[] args){
> >    Hoge hoge = new Hoge();
> >    hoge.TABLE_NAME;///←ここでエラー
> >  }
> >}
> 
> C#は出始めの頃にちょっと勉強したきりですっかり忘れてますが、
> 
> >でもとっても不便です。
> 
> これができなくて不便だという状況を想像できません。
> 「Hoge.TABLE_NAME」と書けばすむ話じゃないかと思います。
> 
> どうせ、インスタンスによって参照するフィールドを切り替える
> ようなことはJavaでもできないんですし。
すいません・・・
例が悪かったです。
言いたかったことは、C#ではインスタンス変数でstaticフィールドが参照できない
ということです
(javaでは可能だがC#は不可例)
interface Hoge{
  String getTableName();
}
class Moge implements Hoge{
  public static String TABLE_NAME = "HOGETBL";
  public String getTableName(){
    return TABLE_NAME;
  }
}
class Rage implements Hoge{
  public static String TABLE_NAME = "RAGETBL";
  public String getTableName(){
    return TABLE_NAME;
  }
}
public class Test {
  public static void main(String[] args){
    Hoge h1 = new Moge();
    Hoge h2 = new Rage();
    print(h1);
    print(h2);
  }
  void print(Hoge h){
    System.out.println(h.getTableName());
  }
}
もちろん、Moge.TABLE_NAMEという形でも使いたいという前提です。