簡體   English   中英

C#泛型問題

[英]C# Generics Question

是否可以在c#中執行以下操作? 基本上TParent和TChildren應該是A類的類型,但不一定要有相同類型的傳入。我知道這可能聽起來令人困惑但我想強烈鍵入特定對象的子項和父項,但同時他們必須是同一類型。 因為TParent繼承自A,這意味着它需要繼承自A但使用可能不同類型的類型參數。

public class A<TParent, TChildren> 
    where TParent : A
    where TControls : A
{
    TParent Parent;
    List<TChildren> Children;
}

或者更容易看到這里:

public class A<TParent, TChildren>
    where TParent : A<?, ?>
    where TChildren : A<?, ?>
{
    TParent Parent;
    List<TChildren> Children;
}

我希望這不會太混亂。 這是可能嗎?

謝謝 :)

如果你試圖說“父母必須將這種類型作為孩子,孩子必須將這種類型作為父母”,那么我認為答案是否定的,你不能,因為你也需要知道父母的父母和孩子的孩子的類型。

但是,你可以這樣做

public interface IHasChildren<T>
{
    List<T> Children { get; set; }
}

public interface IHasParent<T>
{
    T Parent { get; set; }
}

public class A<TParent, TChildren> : IHasChildren<TChildren>, IHasParent<TParent>
    where TParent : IHasChildren<A<TParent, TChildren>>
    where TChildren : IHasParent<A<TParent, TChildren>>
{
    public List<TChildren> Children { get; set; }
    public TParent Parent { get; set; }
}

不,這是不可能的。 你最接近的是定義另一個基類型,並要求TParent和TChild繼承:

public class A { }  // or an interface

public class A<TParent, TChild> : A
  where TParent : A
  where TChild : A
{ }

這並不能保證TParent和TChild屬於通用A<,>類型,但至少允許您對它們施加一些約束, A<,>實現可以采用這些約束。

不,這是不可能的。 但是,一種解決方法是創建A<TParent, TChild>的子類,並強制泛型類型參數屬於該類型:

public interface A
{
   // some properties and methods
}

public class A<TParent, TChild> : A where TParent : A where TChild A
{
   // something else here.  
}

暫無
暫無

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

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