我不想讓類B成為泛型,因為有很多類繼承自類B。如何在一個非泛型類中使用泛型類 "classA "的方法 "GetSomeData"?
以下是我的代碼:
public abstract class classA< T> : IInterface<T>
where T : new( )
{
public String GetSomeData(Guid ID)
{
return somestring。
}
}
public abstract class ClassB : InterfaceB ?
{
//Use GetSomeData(Guid ID)here。
}
在B類中呼叫GetSomeData的最佳方法是什么?
uj5u.com熱心網友回復:
首先,你的代碼本身看起來并不干凈。C#的編碼慣例沒有得到滿足&;不是所有使用的組件都存在。
但是為了回答你的問題,你需要在使用通用方法/類之前指定具體的型別T。
例如,作業代碼可能是這樣的:
public abstract class GenericParent< T>
where T : new( )
{
public string GetSomeData(Guid id) => string。 空。
}
//Non abstract type, to create be able to create an instance。
public class GenericChild<T> 。GenericParent<T> where T : new( )
{
}
public abstract class ClassB public void DoSomething()
{
///創建一個通用型別的實體,指定具體的T(在本例中為SomeClass型別)。
var instance = new GenericChild<SomeClass>()。
instance.GetSomeData(Guid.Empty)。
}
}
//一個型別的例子,它滿足泛型中T的 "where "條件。
public class SomeClass
{
}
uj5u.com熱心網友回復:
按照OOP的原則,抽象類不能被實體化。 它們只能被繼承。那么,有幾種方法可以讓你從抽象類中訪問實體變數和方法,如下所示。
public abstract class classA< T> : IInterface<T>
where T : ITask, new()
{
public String GetSomeData (Guid ID)
{
return somestring。
}
}
public class ChildOfClassA : ClassA<SomType_of_Type_ITask>
{
}
public abstract class ClassB : InterfaceB
{
//Use GetSomeData(Guid ID)here。
ChildOfClassA obj = new ChildOfClassA()。
string result = obj.GetSomeData(Guid.NewGuid()) 。
- 如果該方法沒有與類的實體緊密耦合,則使其成為靜態的,然后你可以用
ClassName.MethodName來使用它。
public abstract class classA<。 T> : IInterface<T>
where T : ITask, new()
{
public **static** String GetSomeData (Guid ID)
{
return somestring。
}
}
public abstract class ClassB : InterfaceB ?
{
//Use GetSomeData(Guid ID) here
string result = classA.GetSomeData(Guid.NewGuid()) 。
- 你可以在你想使用它的類中繼承這個抽象類,并通過
base.MethodName或直接MethodName來訪問它。
public abstract class classA< T> : IInterface<T>
where T : ITask, new()
{
public string GetSomeData(Guid ID)
{
return somestring。
}
}
public abstract class ClassB : ClassA<SomeType_of_Type_ITask> , InterfaceB
{
//在這里使用GetSomeData(Guid ID)。
string result = [base.]GetSomeData(Guid.NewGuid()); //[base.]是可選的,甚至你可以覆寫這個函式或多載它。
}
在情況1和3中,你將不得不傳遞通用引數,以便繼承抽象類,因為在你的情況下,抽象類接受通用引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307077.html
標籤:
