1)这个监视函数怎样知道欲监视的函数的各个参数的类型?? (50分)
这个问题其实很简单,你知道,在C#中,所有的东西都是继承于object这个终极基类的,而终极基类中,有两个公共方法,那就是ToString()和GetType()
其中的GetType()用于获得表示当前实例的确切运行时类型,所以不管是什么函数,什么类,什么实例,由于他们都继承自object终极基类,所以,GetType()对于他们是绝对有效的一种获得实例类型的方法,包括你想要的函数类型。示例方法如下(微软标准示例):
using System;public class MyBaseClass: Object {
}public class MyDerivedClass: MyBaseClass {
}public class Test {   public static void Main() {
      MyBaseClass myBase = new MyBaseClass();
      MyDerivedClass myDerived = new MyDerivedClass();
      object o = myDerived;
      MyBaseClass b = myDerived;      Console.WriteLine("mybase: Type is {0}", myBase.GetType());
      Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
      Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
      Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType());
   }
}
/*This code produces the following output.mybase: Type is MyBaseClass
myDerived: Type is MyDerivedClass
object o = myDerived: Type is MyDerivedClass
MyBaseClass b = myDerived: Type is MyDerivedClass */
如果完美回答了你的问题,请先给这个分数50分,因为第二个问题我不太有把握,所以试一下,但是第一个问题的分一定要给我哦!
2)数字型可以转化成字符串的,但像DataTable类型的变量怎样把其转化成字符串,例如:我定义——DataTable mydatatable=new DataTable ;      (50分)
      调用下面的函数:mydataset(mydatatable);
函数:
    private DataSet mydataset(DataTable mydt)
    {
       .....//函数代码。
       ..//监视函数。(此时我怎样知道参数mydt就是mydatatable,并将其转换成这样的字符串:“mydatatable”????)
     }
我没有看明白你的第二个问题,不过好像跟类型转换并没有关系.(From 此时我怎样知道参数mydt就是mydatatable,并将其转换成这样的字符串:“mydatatable”????)
你好像是要将利用参数mydt来解决函数中的问题改成使用mydatatable来使用吧?解决方法如下,
if((string)mydt.GetType()=="mydatatable")
{
mydatatable mydatatable1=new mydatatable();
//用mydatatable1使用去解决函数中的问题就可以了。
....
}

解决方案 »

  1.   

    第二个问题:string rtnString;
    if (mydt is DataTable)
    {
      rtnString = "mydatatable";
    }
    else
    {
      rtnString = "";
    }return rtnString;
      

  2.   

    DataTable mydatatable = new DataTable();
    mydataset(mydatable);DataTable hisdatatable = new DataTable();
    Mydataset(hisdatatable);从实际编程角度看,对类型实例的名字(mydatatable和hisdatatable)没必要知道,因为他们的行为是一致的,只是代表了不同的对象。如果你很想把类型实例区分开,自己写一个类,例如:
    class NewDataTable : DataTable {
    private string name = “N/A”;
    public NewDataTable(string name) {
    this.name = name;
    }
    public Name {
    get {return name;}
    }
    }
      

  3.   

    Sorry,上面的例子错了,类型的句柄的名字信息对我们没有意义,上面的例子是制定特定对象的。