将对象解析为方法

时间:2013-09-07 15:29:26

标签: c# object methods

我正试图让这段代码工作..我已经谷歌搜索已经超过一个小时但我似乎无法让这段代码工作: (我对C#完全不熟悉)

我认为这与方法打印有关。我收到以下错误:

类型'object'不包含'Voornaam'的定义,也没有找到'object'类型的扩展方法'Voornaam'

// naam: Dylan Westra
// klas: i1b
// datum 07-09-2013
using System;

namespace les2
{

    public class client
    {
        public string Voornaam;
        public string Achternaam;
        public string Adres;
        public int Salaris;

        public client (string voornaam, string achternaam, string adres, int salaris)
        {
            Voornaam = voornaam;
            Achternaam = achternaam;
            Adres = adres;
            Salaris = salaris;
        }
        public void print (object obje)
        {
            Console.WriteLine (obje.Voornaam + " " + obje.Achternaam + " " + obje.Adres + " " + obje.Salaris);
        }

    }

    class MainClass
    {
        public static void Main (string[] args)
        {
            client gegevens1 = new client("Dylan", "Westra", "Rozengracht 34", 1200);
            //client gegevens2 = new client("Rosa", "de Gruijter", "Rozengracht 34", 200);
            client.print(gegevens1);
        }
    }
}

编辑:是否有类似图像的内容(例如html中的盒子模型),然后是类,对象和方法?

3 个答案:

答案 0 :(得分:2)

public void print (object obje){
   Console.WriteLine (obje.Voornaam + " " + obje.Achternaam + " " + obje.Adres + " " + obje.Salaris);
}

将方法更改为public void print (Client obje)

或先抛出它:

public void print (object obje) {
   obje = (Client) obje;
   // OR
   obje = obje as Client;
   Console.WriteLine (obje.Voornaam + " " + obje.Achternaam + " " + obje.Adres + " " + obje.Salaris);
}

这背后的原因是您定义了将Object(每个类的基类)作为参数的方法,但这也意味着您只能访问{中定义的方法{1}}课程。如果要使用Object中定义的方法,则必须定义方法(第一种方法)或明确告诉编译器您将使用该参数作为类型{{1}的对象(第二种方法)。

话虽如此:考虑Client类中定义Client,您可以省略参数并直接访问实例成员。

导致:

Print()

答案 1 :(得分:1)

对于OOP样式,你应该这样做:

using System;

namespace les2
{

  public class client
  {
    public string Voornaam;
    public string Achternaam;
    public string Adres;
    public int Salaris;

    public client (string voornaam, string achternaam, string adres, int salaris)
    {
        Voornaam = voornaam;
        Achternaam = achternaam;
        Adres = adres;
        Salaris = salaris;
    }
    public void print()
    {
        Console.WriteLine (Voornaam + " " + Achternaam + " " + Adres + " " + Salaris);
    }
  }

  class MainClass
  {
    public static void Main (string[] args)
    {
        client gegevens1 = new client("Dylan", "Westra", "Rozengracht 34", 1200);
        gegevens1.print();
    }
  }
}

注意:请记住使用首字母大写,Client而非clientPrint而不是print来命名类,属性和公共方法。您可能想要了解有关static memberinstance member的更多信息。

答案 2 :(得分:1)

如果您需要client对象作为参数传递,请在print方法中定义参数类型:

    public void print (client obje)
    {
        Console.WriteLine (obje.Voornaam + " " + obje.Achternaam + " " + obje.Adres + " " + obje.Salaris);
    }

这告诉编译器对象上有哪些字段/方法。

但是,鉴于在print中定义client,不需要将对象传递给方法。您可以直接访问client字段:

public void print ()
    {
        Console.WriteLine (Voornaam + " " + Achternaam + " " + Adres + " " + Salaris);
    }