我有一些这样的课:
public class BaseClass
{
public int Id { get; set; }
public void MethodOfBase(){}
}
public class Deliver1 : BaseClass
{
public string Name { get; set; }
}
public class Deliver2 : BaseClass
{
public string ClassName { get; set; }
}
public class Deliver3 : BaseClass
{
public int Age { get; set; }
}
我有一些代码:
public void Method1()
{
Deliver1 deliver1 = null;
MethodWithBaseClass(deliver1);
Deliver2 deliver2 = null;
MethodWithBaseClass(deliver2);
Deliver3 deliver3 = new Deliver3();
MethodWithBaseClass(deliver3);
}
public void MethodWithBaseClass(BaseClass baseClass)
{
if(baseClass == null)
baseClass = ???
}
我想初始化传递
但我不想这样检查:
public void MethodWithBaseClass(BaseClass baseClass)
{
if (baseClass == null && baseClass is Deliver1)
baseClass = new Deliver1();
else if.....
}
因为太多的中频检查。
可能吗?以及如何做到这一点?
非常感谢!
最佳答案
您编写的代码无法实现,因为if (baseClass == null && baseClass is Deliver1)
将始终返回false
。那是因为检查null
引用上的类型无效(它检查值,而不是后备变量类型)。
在这种情况下,您必须使用泛型(和ref
),但我认为这不是一个特别好的设计:
public void MethodWithBaseClass<T>(ref T instance) where T : new()
{
if (instance == null)
{
instance = new T();
}
}
用法:
Deliver1 deliver1 = null;
MethodWithBaseClass(ref deliver1);
关于c# - 在参数上按基类初始化传递类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52830567/