-5

我正在尝试这个示例问题,我必须创建两个隐式转换运算符才能从 Human 创建一个 Doggy 类,反之亦然。课程需要考虑到人类的一年是狗的七年。有人告诉我,如果从 Dog 年变为人类年以确保年龄的类型仍然是 int (当然),并且可能需要一些明确的转换。我不知道如何定义 DogToHuman.Name、DogToHuman.Age、HumanToDog.Name 和 HumanToDog.Age。我对编程有点陌生,所以我不习惯这种格式。任何数字开头都可以,就像人类 25 岁一样。

class Human
{
    public string Name;
    public int Age;
    public Human(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Doggy
{
    public string Name;
    public int Age;
    public Doggy(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class ConversionQuestion
{
    static void Main(string[] args)
    {
        Console.WriteLine("As a Human, {0} would be {1}", DogToHuman.Name, DogToHuman.Age);
        Console.WriteLine("As a Dog, {0} would be {1}", HumanToDog.Name, HumanToDog.Age);
        Console.ReadLine();
    }
}

抱歉有任何困惑,我不仅仅是在寻找答案,而是在寻找如何去做。

4

3 回答 3

1

你几乎在你的问题中自己回答了这个问题。如果您搜索“.net 隐式转换”,您将打开此页面 ( http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx ),该页面向您展示如何创建隐式类型转换。基于此,我将您的课程修改如下:

class Human
{
    public string Name;
    public int Age;

    public Human( string name, int age )
    {
        Name = name;
        Age = age;
    }

    public static implicit operator Doggy( Human human )
    {
        return new Doggy( human.Name, human.Age / 7 );
    }
}

class Doggy
{
    public string Name;
    public int Age;

    public Doggy( string name, int age )
    {
        Name = name;
        Age = age;
    }

    public static implicit operator Human( Doggy dog )
    {
        return new Human( dog.Name, dog.Age * 7 );
    }
}

然后你可以像这样使用它:

Human human = new Human( "Fred", 42 );
Doggy dog = human;

Console.WriteLine( "As a Human, {0} would be {1}", human.Name, human.Age );
Console.WriteLine( "As a Dog, {0} would be {1}", dog.Name, dog.Age );
Console.ReadLine();

关键是转换是隐式的,您只需将一种类型分配给另一种类型,转换就会神奇地发生。

于 2014-04-23T22:46:22.193 回答
1

将您的 ConversionQuestion 类更改为以下内容:

class ConversionQuestion
{
    static void Main(string[] args)
    {
        Doggy dog = new Doggy("Max", 3);
        Human human = new Human("Leonardo", 23);

        Console.WriteLine("As a Human, {0} would be {1}", DogToHuman(dog).Name, DogToHuman(dog).Age);
        Console.WriteLine("As a Dog, {0} would be {1}", HumanToDog(human).Name, HumanToDog(human).Age);
        Console.ReadLine();
    }

    public static Human DogToHuman(Doggy dog)
    {
        return new Human(dog.Name, (dog.Age * 7));
    }

    public static Doggy HumanToDog(Human human)
    {
        return new Doggy(human.Name, (human.Age / 7));
    }
}
于 2014-04-23T22:47:11.133 回答
0

我不完全清楚你在问什么,但听起来你只是想要一种方法来实例化你的类并将它们传递给一些可以转换它们的年龄的方法。

无需为您编写所有代码,这是您可以使用的一种方法。根据需要修改它...

class ConversionQuestion
{
    static void Main(string[] args)
    {
        Human human = ... // create an instance of Human, supply name and age
        Doggy doggy = ... // create an instance of Doggy, supply name and age

        Console.WriteLine("As a Human, {0} would be {1}", doggy.Name, DogToHumanConversion(doggy.Age));
        Console.WriteLine("As a Dog, {0} would be {1}", human.Name, HumanToDogConversion(human.Age));

        Console.ReadLine();
    }    

    private int DogToHumanConversion(int dogAge)
    {
        // convert dog age to human

        // return human age
    }

    private int HumanToDogConversion(int humanAge)
    {
        // convert human age to dog

        // return dog age
    }
}
于 2014-04-23T22:46:13.243 回答