C#:获取参数所属的类型 公共抽象类车辆 { 受保护的void方法(字符串paramName,ref T myParam,T val) { //获取myParam所属的类型。。。 //(在这种情况下,哪一个恰好是汽车或飞机) 类型t=类型(…); } } 公营车辆 { 私有字符串模型; 公共字符串模型 { 获取{return\u model;} 集合{SomeMethod(“Model”,ref _Model,value);} } } 公共类飞机:运载工具 { 私人Int32_引擎; 32台发动机中的公共发动机 { 获取{return\u引擎;} 设置{SomeMethod(“引擎”,ref _引擎,值);} } }

C#:获取参数所属的类型 公共抽象类车辆 { 受保护的void方法(字符串paramName,ref T myParam,T val) { //获取myParam所属的类型。。。 //(在这种情况下,哪一个恰好是汽车或飞机) 类型t=类型(…); } } 公营车辆 { 私有字符串模型; 公共字符串模型 { 获取{return\u model;} 集合{SomeMethod(“Model”,ref _Model,value);} } } 公共类飞机:运载工具 { 私人Int32_引擎; 32台发动机中的公共发动机 { 获取{return\u引擎;} 设置{SomeMethod(“引擎”,ref _引擎,值);} } },c#,C#,有没有可能做我想做的事。。。也就是说,以某种方式使用引用的参数myParam获取t be typeof(Car)或t be typeof(Plane) 哦,我想避免将“this”实例传递给SomeMethod,或者如果可以的话,添加另一个泛型约束参数。使SomeMethod非泛型,然后键入t=this.GetType()您不需要传递this-它已经是一个实例方法了 只需使用: public abstract class Vehicle { protected void SomeMetho

有没有可能做我想做的事。。。也就是说,以某种方式使用引用的参数myParam获取t be typeof(Car)或t be typeof(Plane)


哦,我想避免将“this”实例传递给SomeMethod,或者如果可以的话,添加另一个泛型约束参数。

使
SomeMethod
非泛型,然后
键入t=this.GetType()
您不需要传递
this
-它已经是一个实例方法了

只需使用:

public abstract class Vehicle
{
    protected void SomeMethod<T>(String paramName, ref T myParam, T val)
    {
        //Get the Type that myParam belongs to...
        //(Which happens to be Car or Plane in this instance)
        Type t = typeof(...);
    }
}

public class Car : Vehicle
{
    private String _model;
    public String Model
    {
        get { return _model; }
        set { SomeMethod<String>("Model", ref _model, value); }
    }
}

public class Plane: Vehicle
{
    private Int32 _engines;
    public In32 Engines
    {
        get { return _engines; }
        set { SomeMethod<Int32>("Engines", ref _engines, value); }
    }
}
这将给出车辆的实际类型,而不是
vehicle

您可以调用
GetType()
,它将在当前实例上运行。这有点误导,因为代码存在于基类中,但它将在运行时为您正确地获取继承的类类型

Type t = this.GetType();
另一方面,您不必将类型传递到
SomeMethod
中,它将由编译器为您推断

Type t = this.GetType(); 
/*or equivlently*/
Type t = GetType();

这违背了在此基础方法上扩展的目的。我只是想对它进行扩展,而不是将它复制/粘贴到使用基类的所有类中。不是向下投票,但答案的第二部分不需要第一部分
SomeMethod
不是基于对象类型的泛型,而是基于参数类型的泛型。是否确定?看起来他想要
typeof(T)
。这实际上是有道理的。那么,如果我继续继承本田汽车,我该怎么想呢
HondaAccord:HondaAccord
HondaAccord
Honda
作为“this”?@Gabe,不,他肯定想要
this.GetType()参见他的示例,他想要
typeof(Car)
typeof(Engine)
。在他的泛型方法中,T是
String
Int32
<代码>类型t
t
是两个不同的关注点。没有。。。使用T只是为了我可以执行
T myParam,T val
,而不是
Object myParam,Object val
,然后必须进行强制转换。您是否有可能引发PropertyChanged事件?你能告诉我们你为什么需要这个型号吗?您可能不需要它。我想不出任何理由需要
GetType()
,除非您正在进行类型测试。很有可能,我打赌有一种方法可以在不进行任何类型测试的情况下重新编写所做的任何事情。@Juliet:我想获取类型,只是为了与
Debug.WriteLine(String.Format(“type:{0},Property:{1}”,GetType(),paramName))一起使用。我不知道GetType get是实际的类型。不管出于什么原因,我认为它只会返回基类型,但它不会。。。事实上,我甚至不需要
typet=typeof(…)
,但显然
this.GetType()
正是我想要的我传递的类型T用于_模型和值,因此我不必将它们从对象强制转换为类型。@myermain正确,我会将函数保持为泛型,但我的意思是,调用方法时不必指定泛型。编译器足够聪明,可以添加泛型。如果调用
SomeMethod(“Model”,ref\u Model,value)
编译器实际上会调用
SomeMethod(“Model”,re Model,value)
。它从参数中提取类型。它为您节省了一个步骤,并且如果参数类型发生更改,则可以少修改一件事。
public class Car : Vehicle 
{ 
    private String _model; 
    public String Model 
    { 
        get { return _model; } 
        set { SomeMethod("Model", ref _model, value); } 
    } 
}