문제

내가하고 싶은 일은 다음과 같습니다.

public [type determined at runtime] ImageToShow
{
  get
  {
    if(this.IsWebContext)
    {
       return this.GetString();
    }
    else
    {
       return this.GetBitmap();
    } 
  }
}

처음에는 T 가이 클래스의 인스턴스가 생성 된 일반적인 유형이라면 간단하고 가능해 보입니다. 그러나 내가하고 싶은 것은 이미지 속성 내에서 결정된 결정을 기반으로 문자열 또는 비트 맵을 제공하여 이미지로 서버가 무엇인지에 대한 지식이 이미지 속성에 포함되어 있으며 다른 곳에 대해 알 필요가 없습니다. 나는 확실히 반환 유형 '객체'를 만들 수 있고 그것이 작동하지만, 복싱 및 Unboxing 비 효율성을 원하지 않습니다. 나는 반사를 원하지 않습니다.

이 아이디어를 포기하기 전에 이것이 가능하다면 여러분과 확인하고 싶었습니다.

도움이 되었습니까?

해결책

권투는 값 유형을 참조 유형으로 변환 할 때 발생합니다.

int i = 5;

object o = i; // Boxing

당신이 돌아 오기 때문에 String 또는 a Bitmap, 참조 유형 모두 권투 나 복싱에 대해 걱정하지 않고도 객체를 사용할 수 있습니다.

다른 팁

발신자가 공공 재산을 사용하여 "알고"하는 것이 더 나을 수 없습니까?

YourClass.IsWebContext

뭘 기대 할까?

그런 다음 일반 유형 T를 사용할 수 있습니다.

이것을 해결하는 대신 다른 디자인을 고려해야합니다. 예를 들어 WebContext가 될 모든 것에 대해 별도의 클래스를 함께 만들고 공통 인터페이스를 구현합니다.

우선, 객체로서 참조 유형을 반환하는 것은 권투가 아닙니다. 권투는 ValueType을 참조 장치로 사용할 때만 발생합니다.

이제 ReturnType 객체를 사용하고 있다고 가정 해 봅시다. 그런 다음 리턴 된 객체 인스턴스가 is 운영자.

object o = myClass.ImageToShow;

if (o is String)
{
  // Use as a String
}
else if (o is Bitmap)
{
  // Use as a Bitmap
}

둘째, 확인하는 것이 좋습니다 IsWebContext 모든 재산에서. 기본 클래스를 만드는 것이 더 합리적이며, 사용되는 환경을 고려하여 전문화하는 것이 더 합리적입니다.

예, 인터페이스를 사용하십시오.

   public interface IAmImage {}
   public class StringImage: IAmImage
   {
      private string img;
      public string Image { get { return img; } set { img = value; } }
      public StringImage(string image) { img = image;}
   }
   public class BitmapImage: IAmImage
   {
      private Bitmap img;
      public Bitmap Image { get { return img; } set { img = value; } }
      public BitmapImage(Bitmap image) { img = image;}
   }

... 그리고 고객 코드에서 ....

   public IAmImage ImageToShow 
   {  
       get  
       {    
           return this.IsWebContext?
              new StringImage(this.GetString()):        
              new BitmapImage(this.GetBitmap());    
       }
   } 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top