我需要一个解决方案来消除类中的公共字符串

时间:2018-11-28 19:20:58

标签: c# class

我是编码的新手,只是学习如何给班级成员打电话。如果我要创建和存储多个字段并从控制台访问它们,请推荐正确的方法。有人告诉我,类中的多个公共变量效率不高。请指教。谢谢!

public class MainClass
{

    class IronMan
    {
        public string fName = "Tony";
        public string lName = "Stark";
        public int Age = 50;

    }

    class CaptainAmerica
    {
        public string fName = "Steve";
        public string lName = "Rogers";
        public int Age = 126;
    }

    public static void Main()
    {
        CaptainAmerica avenger = new CaptainAmerica();
        Console.WriteLine(avenger.fName);
    }  
}

5 个答案:

答案 0 :(得分:8)

(<!--.*?-->)|(<!--[\w\W\n\s]+?-->)IronMan应该是对象而不是类,CaptainAmerica应该是通用的

在您的示例中,您的班级应为class

SuperHero

然后,在您的public class SuperHero { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public SuperHero(string FirstName, string LastName, int Age) { this.FirstName = FirstName; this.LastName = LastName; this.Age = Age; } } 中创建Main()的实例

SuperHero

我建议您在开始编程之前先阅读一下OO(假设您将使用面向对象范例)

答案 1 :(得分:0)

我认为您最好采用以下方法:

public class MainClass
{

    class Hero
    {
        public string FirstName {get; set;}
        public string LastName {get; set;}
        public int Age {get; set;}
    }

    public static void Main()
    {
        Hero avenger = new Hero
        {
            FirstName = "Steve",
            LastName = "Rogers",
            Age = 126
        };

        Console.WriteLine(avenger.FirstName);
    }  
}

关于在类中公开哪些属性,一般的经验法则是仅在必须公开属性时才将其公开,并且您通常应该使用限制最大的访问修饰符,这些修饰符仍然允许您的应用程序功能。不必要地公开类的属性可能会导致其他类以最初不打算使用的方式滥用该类,并经常在大型应用程序中造成麻烦。涉及到很多主题,您可以阅读更多相关信息,但是最直接相关的主题之一是信息隐藏的概念。

答案 2 :(得分:0)

如其他示例所示,您对POCO所做的工作不多。如果您希望您的班级实际做某事,您需要这样做

public abstract class SuperHero
{
    public string FirstName { get; protected set; }
    public string LastName { get; protected set; }
    public int Age { get; protected set; }

    public abstract void KillEnemy(IEnemy e);

}


public class IronMan : SuperHero
{
    public IronMan() : base()
    {
        FirstName = "Tony";
        LastName = "Stark";
        Age = 50;
    }


    public overrides void KillEnemy(IEnemy e)
    {
        // Do what IronMan does to enemy  
    }

}

答案 3 :(得分:0)

您要创建一个复仇者。任何复仇者都有共同的属性(fname,lname,age),因此,当您使用constructor创建复仇者时,必须给出属性的值。

   public class MainClass
    {
        public static void Main()
        {
            Avenger CaptainAmerica = new Avenger("Steve", "Rogers", 126);
            Avenger IronMan = new Avenger ("Tony", "Stark", 50);
            Console.WriteLine(CaptainAmerica.fName); // Steve
            Console.WriteLine(IronMan.fName); // Tony

        }  
    }



public class Avenger
{
    public string fName {get; set;};
    public string lName {get; set;};
    public int Age {get; set;};

    Public Avenger (string fname, string lname, int age){
          this.fName = fname;
          this.lName = lname;
          this.Age = age;
    }
}

答案 4 :(得分:0)

如果将来您需要对IronMan或CaptainAmerica做一些不同的事情-那么最好制作基类或接口并从中继承,如:

public class Hero
{
  public string fName;
  public string lName;
  public int Age;
  public override string ToString()  // for easy "access them from the console"
  {
    return $"{fName}:{lName}:{Age}";
  }
}
class IronMan:Hero
{
}
class CaptainAmerica:Hero
{
}

并使用它:

Hero iron = new IronMan() { fName = "i", lName = "in", Age = 10 };
Hero cap = new CaptainAmerica() { fName = "c", lName = "cn", Age = 10 };

Console.WriteLine(iron.ToString());
Console.WriteLine(cap.ToString());

或根据类型执行某些操作:

Hero noname = iron;
//.....
noname = new CaptainAmerica() { fName = "c", lName = "cnn", Age = 15 };
//.....
if (noname.GetType()==typeof(IronMan))
{
  //do for iron
}

(但更好的方法-使用继承和模式方法)