簡體   English   中英

將對象類型拆箱為基本類型和其他類型(模擬后期綁定)

[英]Unboxing an Object type to a primitive and other types (simulating late-binding)

我有一個類,其中包含每種基本類型,字符串和INetSerializable的類似於Append的成員:

   public class TypeAppender
   {
         public void Append(int i ) {}
         public void Append(double d) {}
         public void Append(string s){}i){}
         public void Append(INetSerializable ins){}
    }

在另一個類中,我想通過傳遞Object來稱呼此方法為“一般來說”

說我有這樣的事情:

class SomeClientClass
{
    TypeAppender _appender=new TypeAppender ();  
    Dictionary<string, Object> _cmdTable =new Dictionary<string, Object>();   

    public void Process()
    {   
        foreach(KeyValuePair<string, Object> pair in cmdTable )   
        {
              _appender.Append(pair.Key);

              Object obj = pair.Value;
              if (obj is int)
                 _appender..Append((int)obj);
              else if (obj is double)
                 _appender..Append((double)obj);
              else if (obj is char)
                 _appender..Append((char)obj);
              else if (obj is string)
                 _appender..Append((string)obj); 
        }
    }     
    public void AddParam<T>(string key, T value)
    {
            _cmdTable.Add(key, value);
    }
}

問題1: pair.Value是否會取消裝箱到正確的原語? s

問題2: AddParam成員函數是否存在任何問題

謝謝

沒有。

照原樣使用代碼,因為沒有從object-> non-object type進行的適當轉換,它將無法編譯。 您將必須手動將代碼轉換為適當的類型。

一種選擇是提供Object類型的Append的重載並在那里執行邏輯。

void Append(object obj) {
  if ( obj is int ) {
    Append((int)obj);
  } else if ( obj is double) { 
    Append((double)obj);
  ...
}

編輯問題2

就可以正常運行而言,這沒有什么錯。 但是,它似乎並沒有為您的應用程序增加任何值,而是擁有一個采用對象參數的非泛型值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM