2016-10-11 11 views
0

メソッドを使用してオブジェクトを作成し、そのオブジェクトをmain()に戻そうとしています。メインになると、Holly.ageなどのオブジェクトのプロパティにアクセスできるようにしたいと考えています。 VSは、main()のHollyオブジェクトが何らかのプロパティを持つことを認識しません。誰かが私が間違っていることを伝えることができますか、それともC#で何か可能でないかどうか私に知らせてください。c#オブジェクトからプロパティ値を取得する

時間を割いて助けてくれる人には、事前に感謝します。 object返しcreateobject

class program 
{ 

    static void Main(string[] args) 
    { 
     object Holly = createobject(Holly, 21); 
     int hollyage = Holly.age; // This Line is the problem Holly.age is not recognized 
     // as anything 

    } 

    public static object createobject(string name, int i) 
    { 
    Cat Holly = new Cat(name, i); 
    return Holly; 
    } 

    public class Cat 
    { 
    public string name; 
    public int age; 
    public string Name 
     { 
      get { return this.name; } 
      set { this.name = value; } 
     } 
    public int Age 
     { 
      get { return this.age; } 
      set { this.age = value; } 
     } 
    public Cat(string name, int age) 
     { 
      this.name = name; 
      this.age = age; 
     } 

} 
+3

これ以外にも、次のことについて学ぶのに適しています。1).NETの命名規則。 2)インデントの規則。 3)自動的にプロパティを実装しました。 –

答えて

1

あなたの方法。あなたがAgeにアクセスすることができます前に、だから、最初に戻ってCatにそれをキャストする必要があります。

int hollyage = ((Cat)Holly).Age; 

を加えてcreateobjectへの通話が間違っています。それは文字列を要求する。変更するには:

createobject("Holly", 21); 

あなたのコードを書くための正しい方法は次のようになります。

static void Main(string[] args) 
{ 
    //variable name in camelCase. 
    //"Holly" is a string 

    object holly = CreateObject("Holly", 21); 

    //Casting from object to Cat so you can access Age property 
    int hollyAge = ((Cat)holly).Age; 
} 

//Function names EachWorkCapitalized 
public static object CreateObject(string name, int i) 
{ 
    Cat holly = new Cat(name, i); 
    return holly; 
} 

public class Cat 
{ 
    //If you implement your properties with the default get set behavior 
    //better use automatically implemented properties 
    public string Name { get; set; } 
    public int Age { get; set; } 

    public Cat(string name, int age) 
    { 
     Name = name; 
     Age = age; 
    } 
} 
2

VSは、任意の特性を有することがメインでオブジェクトホリー()を認識しない

Hollyobjectではなく01と宣言されているためですと同様に、作成ルーチンはCatではなくobjectを返します。

は、あなたの作成ルーチンからCatを返すあなたはまだCat以上に戻ってHollyをキャストする必要がCatのプロパティのいずれかを使用できるようにするには。あなたがより多くのことを行うためにあなたの作成ルーチンを拡張する場合を除き、あなたは本当にそれを必要としないと簡単に行うことができます。

Cat Holly = new Cat("Holly", 21); 

あなたはまた、公共分野や、あなたのCatクラスのパブリックプロパティの両方を持っています。フィールドはプライベートにする必要がありますが、それは問題の原因ではありません。

0

は、あなたが実際にあなたは、単にそれを削除し、変更することができpublic static object createobject()

必要はありません。自分のメインに:

static void Main(string[] args) 
    { 
     Cat Holly = new Cat("Holly", 21); 
     int hollyage = Holly.age; 
    } 
0

問題はホリーは、オブジェクトクラスとして定義されていることで、オブジェクトクラスにはありませんageまたはAgeプロパティを持っています。

あなたは、ラインを変更する必要があります。そして、インテリセンスはタイプCatのものとしてホリー変数を認識します

Cat Holly = createObject("Holly", 21) as Cat; 

0

常にオブジェクトを正しいタイプにキャストして、メンバーにアクセスできます。

int hollyage = ((Cat)Holly).Age; 
関連する問題