문제

간단한 질문, 희망적으로 간단한 답변 :

다음을하고 싶습니다.

private DateTime m_internalDateTime;
public var DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = value; } // here value is of type DateTime
}

위는 내가하려는 일의 예일뿐입니다. 유형 X의 내부 변수에 대한 공개 액세서를 원합니다. 나는 그 변수를 문자열로 얻기를 원하지만 유형 x의 무언가를 사용하여 설정합니다.

이게 가능해?

--편집하다--

방금 다음과 같은 일을 할 수 있다는 것을 깨달았습니다.

private DateTime m_internalDateTime;
public object DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = (DateTime)value; } // here value is of type DateTime
}

그러나 "문자열"대신 'get'유형으로 유형 y를 사용한다고 가정 해 봅시다. 코드의 다른 곳에 "DateTimeProperty"를 사용하려면 캐스트해야합니다.

도움이 되었습니까?

해결책

아니요. 호출 코드에 .toString ()을 추가 할 수는 있지만 다음과 같은 다른 이름 없이는 제안하는 것을 수행 할 수 없습니다.

private DateTime m_internalDateTime;
public DateTime SetDateTime { set { m_internalDateTime = value; } }
public string GetDateTime   { get { return m_internalDateTime.ToString(); } } 

또는 속성 대신 방법을 사용하는 것이 더 좋습니다 (주석에 언급 된 바와 같이) :

private DateTime m_internalDateTime;
public void SetDateTime(DateTime dateTime) { m_internalDateTime = dateTime; }
public string GetDateTime() { return m_internalDateTime.ToString(); }

그것을 명심하십시오 var 입니다 암시 적으로, 컴파일 타임 타입 varIABLES는 아닙니다 동적 변수.

분명히 하지 마라 편집에서 언급 한 내용을 수행하십시오. 컨벤션의 휴식, 가능한 성능 영향 (약간) 및 상당한 현지화 문제를 도입했습니다.

다른 팁

재산으로서, 이것은 불가능하지 않습니다. 다른 유형의 방법을 얻거나 설정할 수 있지만 속성의 경우 유형이 동일해야합니다.

편집하다:

하는 동안:

private DateTime m_internalDateTime;
public object DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = (DateTime)value; } // here value is of type DateTime
}

구문 적으로 정확하고 컴파일되며 DateTime을 입력으로 받아들이고 문자열을 반환 할 수 있습니다. 이것은 좋은 계획이 아닙니다. 작동하지만이 코드에 액세스하는 사람과 모든 사람이 불필요한 검증을 수행하게합니다. 또한, 미래에 다른 개발자에게는 취약합니다. 또한, 강력하게 입력 한 방식으로 두 개의 속성 또는 동일한 목표를 달성하는 두 가지 방법을 생성하는 더 이상 코드가 거의 없습니다.

개인적으로 두 가지 방법을 사용하는 것이 좋습니다 (이유에 대한 좋은 설명은 Jeff Yates 의견 참조).

private DateTime m_internalDateTime;
public string GetDateTime()
{
    return m_internalDateTime.ToString();
}

public void SetDateTime(DateTime dateTime)
{
    m_internalDateTime = dateTime;
}

그런 식으로는 아니지만 M_internaldateTime 필드에 액세스하는 두 번째 속성을 가질 수 있습니다.

public string DateTimeString
{
   get { return m_internalDateTime.ToString(); }
}

어쩌면 그것은 도움이 될 것입니다

public class TDecimal
{
    private decimal? m_value;
    public bool HasValue { get { return m_value.HasValue; } }
    public decimal Value { get { return m_value.Value; } }

    public static implicit operator TDecimal(string a_value)
    {
        decimal d;
        if (decimal.TryParse(a_value, out d))
        {
            return new TDecimal() {m_value = d};
        }

        return new TDecimal() {m_value = null};
    }

    public static implicit operator decimal(TDecimal a_value)
    {
        if(a_value.HasValue)
        {
            return a_value.Value;
        }

        throw new ArgumentNullException("a_value");
    }
}

public class A
{
    public TDecimal Prop { get; set; }
}


A a = new A();

a.Prop = "123";
if (a.Prop.HasValue)
{
    decimal d = a.Prop;
}

간단한 답변 아니요, 외부 코드에 귀하의 속성은 필드가 정확한 방식으로 행동 할 것입니다. 유형으로 제출할 수없는 것처럼 세트/get 유형을 가진 속성을 가질 수 없습니다. 값이 다른 유형을 다시 얻습니다.

어때요 :

private DateTime intDT;
public string DateTimeProperty
{   
      get { return intDT.ToString(); } // Return a string   
      set 
      { 
         DateTime dt;
         if (DateTime.TryParse(value, out dt))
             intDT = dt;
         else throw new ArgumentException(string.Format(
           "{0} cannot be converted to a DateTime.", value);           
      } 
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top