我放在一起的對象是允許對象將自己公開爲可以由相同類型的另一個對象進行轉換的對象。按照合併的思路思考,但操作不是通用/直接的,這樣您就可以使用反射來簡單地獲取所有屬性並執行一些預定義的操作。因此,我決定嘗試將它實現爲可展示爲可變形的對象,並將它們附加到知道如何執行轉換(可以互換)的對象。該編譯代碼我至今是:C#使用此關鍵字時的泛型類型
public interface ITransformer<TType> where TType : class
{
void Transform(TType source, TType destination);
}
public interface ITransformable<TType> where TType : class
{
bool Locked { get; set; }
ITransformer<TType> Transformer { get; set; }
void TransformFrom(TType source);
}
public class MyTransformer : ITransformer<MyTransformable>
{
public void Transform(MyTransformable source, MyTransformable destination)
{
// Perform some logic for the transform
}
}
public class MyTransformable : ITransformable<MyTransformable>
{
public bool Locked { get; set; }
public ITransformer<MyTransformable> Transformer { get; set; }
public string Value1 { get; set; }
public uint Value2 { get; set; }
public bool Value3 { get; set; }
public void TransformFrom(MyTransformable source)
{
Transformer.Transform(source, this);
}
}
正如你所看到的,類型MyTransformable包含一些數據(值1 - 值3)以及一個鎖定狀態和變壓器對象就知道如何執行該項目的變換(泛型確保只有變壓器能夠在MyTransformer類型上被允許)。
我的問題是,我不希望型可轉換的所有新對象必須調用重複到
public void TransformFrom(MyTransformable source)
{
Transformer.Transform(source, this);
}
所以希望我能加入改變MyTransformable對象
public abstract class Transformable<TType> : ITransformable<TType> where TType : class
{
public bool Locked { get; set; }
public ITransformer<TType> Transformer { get; set; }
public void TransformFrom(TType source)
{
Transformer.Transform(source, this); // ERROR! this is type Transformable<TType> not TType
}
}
public class MyTransformable : Transformable<MyTransformable>
{
}
但是,當然由於我突出顯示的錯誤,所以不會編譯。我覺得我錯過了沿線的某個地方。任何人都可以在這個方向上指出我的正確方向嗎?
您如何期待這項工作:'可變形的'?沒有辦法'this'可以是'int'類型。 –
2012-03-12 20:07:30
如果您正在進行無損轉換,您可能需要考慮爲您的類實施鑄造操作符。 http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/xhbhezf4(v=vs.100) 。aspx – JamieSee 2012-03-12 20:09:18
爲了實現你的目標,你需要對'ITransformer'和'ITransformable '執行一些通用約束。 –
2012-03-12 20:09:51