왜 이것이 실행되지 않습니다 :
class Program
{
static void Main(string[] args)
{
Apple a = new Apple("green");
}
}
class Apple
{
public string Colour{ get; }
public Apple(string colour)
{
this.Colour = colour;
}
}
귀하의 코드는 Visual Studio 2015와 함께 제공되는 C #6에 유효합니다.아니이전 버전의 언어 또는 Visual Studio에 유효합니다. 기술적으로 VS 2013에 Roslyn의 이전 시험판 버전을 설치할 수 있지만 VS 2015가 출시 된 지금은 문제가되지 않습니다.
이 문제가 발생하려면 Visual Studio의 잘못된 버전을 사용하여 C #6 코드를 컴파일하거나 잘못된 개발 환경을 사용하여 명령 줄에서 코드를 컴파일하려고합니다. 예를 들어 PATH가 이전 컴파일러를 가리 킵니다. 아마 2015 년 대신에 '2013 년 개발자 명령 프롬프트'를여셨습니까?
Visual Studio 2015를 사용하여 코드를 컴파일하거나 경로 변수가 최신 컴파일러를 가리켜 야합니다.
Visual Studio 2013 또는 그 이상의 버전을 사용해야하는 경우 이전 구문을 사용하도록 코드를 변경해야합니다 (예 :
public readonly string _colour;
public string Colour { get {return _colour;}}
public Apple(string colour)
{
_colour=colour;
}
또는
public string Colour {get; private set;}
public Apple(string colour)
{
Colour=colour;
}
두 번째 옵션은 읽기 전용이 아니므로 클래스의 다른 멤버는 여전히 속성을 수정할 수 있습니다.
노트
Visual Studio 2015를 사용하여 .NET 4.5를 대상으로 지정할 수 있습니다. 언어와 런타임두 가지 다른 것들. 실제 요구 사항은 컴파일러가 언어 버전과 일치해야한다는 것입니다.
속성에 전용 설정기를 추가하십시오.
public string Colour{ get; private set;}
또는 읽기 전용 백킹 필드를 추가하십시오.
private string _colour;
public string Colour{ get return this._colour; }
public Apple(string colour)
{
this._colour = colour;
}
{get;}="green"
자동 속성 초기화 프로그램입니다. - Panagiotis Kanavos
내 생각에 당신이 찾고있는 것은 GET을 외부 세계에 노출시킴으로써 내부 변수를 보호하는 this 일 뿐이다. 추가 안전을 위해 _colour를 읽기 전용으로 표시하여 클래스 자체 내에서 (인스턴스화 후) 변경할 수 없지만 과장이라고 생각합니다. 사과가 오래되어 갈색이 될 필요가 있다면 어떨까요?!
class Program
{
static void Main(string[] args)
{
Apple a = new Apple("green");
}
}
class Apple
{
private string _colour;
public string Colour
{
get
{
return _colour;
}
}
public Apple(string colour)
{
this._colour = colour;
}
}
여기에 몇 가지 옵션이 있습니다.
// Make the string read only after the constructor has set it
private readonly string colour
public string Colour { get { return colour; } }
public Apple(string colour)
{
this.colour = colour;
}
// Make the string only readonly from outside but editing from within the class
public string Colour { get; private set; }
public Apple(string colour)
{
this.Colour= colour;
}
get; private set;
- dcastro{ get { return colour; } private set; }
작동하지 않아 컴파일하지 못할 수도 있습니다. 그런 뜻 이었습니까{get; private set;}
? - Panagiotis Kanavos
Colour{ get; } = "green"
작동 할 것이다. 이전 버전에서는 그 중 아무 것도 사용하지 않으므로 개인 설정기를 선언해야합니다.Colour {get;private set;}
- Panagiotis Kanavos