2013-07-21 51 views
0

这是一堂我从未完成的作业。如何在C#中用构造函数调用方法?

我做了一个构造函数并尝试调用该方法。它从来没有工作。我真的不知道我在这里做错了什么。我要求输入和readline,然后键入我的构造函数,但它不会调用。我应该怎么称呼它?

public static int RomToNum(String rom) 
{ 
    StringBuilder temp = new StringBuilder(); 
    int ret = 0; 
    char[] letters = rom.ToArray(); 
    foreach (char item in letters) 
    { 
     if (item == 'M') 
      ret += 1000; 
     if (item == 'D') 
      ret += 500; 
     if (item == 'C') 
      ret += 100; 
     if (item == 'L') 
      ret += 50; 
     if (item == 'X') 
      ret += 10; 
    } 

    for (int x = 0; x < letters.Length; x++) 
    { 
     if (letters[x] == 'I' && !letters.Contains('V')) 
     { 
      ret += 1; 
     } 
     else 
     { 
      if (letters[x] == 'I' && x != letters.Length-1) 
      { 
       ret += 4; 
       break; 
      } 
      else if (letters[x] == 'I' && x == letters.Length-1) 
      { 
       ret += 6; 
       break; 
      } 
     } 
    } 
    return ret; 

} 
+1

更新问题与您如何调用此方法 – Damith

+1

您是否试图在另一个类中调用此方法?或在构造函数中?请清除您的问题 – 2013-07-21 04:42:05

+0

在我的其他课程中调用它。 – Zoro

回答

0

我真的不知道你为什么要用构造函数调用该方法,而不是Precious1tj发布的内容。但是,如果你想使用构造函数调用的方法,你可以这样做:

class Program 
    { 
     static void Main(string[] args) 
     { 
      Class2 c2 = new Class2("X"); //outputs '10' once it's instantiated 

      Console.ReadKey(); 
     } 
    } 

    class Class2 
    { 
     //overloaded ctor 
     public Class2(string rom) 
     { 
      Console.WriteLine(RomToNum(rom)); 
     } 
     public static int RomToNum(String rom) 
     { 
      StringBuilder temp = new StringBuilder(); 
      int ret = 0; 
      char[] letters = rom.ToArray(); 
      foreach (char item in letters) 
      { 
       if (item == 'M') 
        ret += 1000; 
       if (item == 'D') 
        ret += 500; 
       if (item == 'C') 
        ret += 100; 
       if (item == 'L') 
        ret += 50; 
       if (item == 'X') 
        ret += 10; 
      } 

      for (int x = 0; x < letters.Length; x++) 
      { 
       if (letters[x] == 'I' && !letters.Contains('V')) 
       { 
        ret += 1; 
       } 
       else 
       { 
        if (letters[x] == 'I' && x != letters.Length - 1) 
        { 
         ret += 4; 
         break; 
        } 
        else if (letters[x] == 'I' && x == letters.Length - 1) 
        { 
         ret += 6; 
         break; 
        } 
       } 
      } 
      return ret; 

     } 
    } 

呼吁从构造方法的缺点是,你必须创建每当你想要的类的新对象评估一个新的罗马数字。

+0

我觉得这是O​​P想要的+1 – 2013-07-21 04:54:05

+1

我基本上会问真正无知的问题,因为我只写了5周。我是在这样的假设下,当我因为某种原因请求输入时,应该用另一种方法...并且不需要我的构造函数调用另一种方法。 – Zoro

1

既然你调用它在另一个类

您使用

CurrentClass.RomToNum("String Values"); 

你不需要为了引用此方法来创建该类的对象,因为它是一个静态方法

+1

是的,这种方式是更简单。 – pcnThird

+0

是的。我也这么认为 – 2013-07-21 04:55:56