2016-10-11 7 views
0

메서드를 사용하여 객체를 만들고 main()으로 반환하려고합니다. 일단 메인에 인쇄 Holly.age와 같은 객체의 속성에 액세스 할 수 있기를 원합니다. VS 속성을 가질 main()있는 홀리 개체를 인식하지 못합니다. 누구나 내가 뭘 잘못하고 있는지 알려주거나 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

귀하의 방법.

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

를 추가로 통화를 createobject 잘못에 : 당신이 Age에 액세스 할 수 있습니다 그래서 먼저 Cat로 다시 캐스팅해야합니다. 문자열을 요청합니다. 변경하려면 :

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 어떤 특성을 가지고 주에서 개체 홀리()를 인식하지 못하는

Holly이 01이 아닌 object으로 선언 되었기 때문입니다.과 유사하게 생성 루틴은 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 Holly = createObject("Holly", 21) as Cat; 

가 그런 인텔리 타입 Cat의 것으로 홀리 변수를 인식합니다 :

당신은 라인을 변경해야합니다.

0

언제든지 개체를 올바른 형식으로 캐스팅하여 개체에 액세스 할 수 있습니다.

int hollyage = ((Cat)Holly).Age; 
관련 문제