首页 > 解决方案 > 我传递了一个值,但它仍然返回 0

问题描述

我将一个值传递给一个类,然后从该类将它传递给另一个类并获取该值。

我试图解析值,但它仍然不起作用,我也尝试使用 getter 和 setter

    public class Product
    {
        public string Title { get; set; }
        public int Price { get; set; }
    }
    public class Book : Product
    {
        public string Isbn { get; set; }
        public int Price2 { get; set; }
    }
    public class Check : Book
    {
        public int Num;
        public int Num2;
        public int Calculate(Book product) //This is important, I would like to keep practicing pass
        {
            Num = (product.Price);
            Num2 = product.Price2;
            Console.WriteLine(Num2);
            return Num + Num2;
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            var num = new Book();
            var checkNum = num.Price = 10; //these is the values
            var checkNum2 = num.Price2 = 20;
            var result = new Check();
            var checkNum3 = result.Calculate(new Book());
            Console.WriteLine(checkNum3.Num);
        }
    }

我期待 30 作为结果

标签: c#generics

解决方案


让我们做你所拥有的工作

  1. Calculate需要得到定价的书。
  2. Calculate返回数字,我们不需要使用.Num.
var num = new Book();
var checkNum = num.Price = 10; //these is the values
var checkNum2 = num.Price2 = 20;
var result = new Check();
var checkNum3 = result.Calculate(num);
Console.WriteLine(checkNum3);

更好的名字

如果您使用更好的名称,则更容易理解。

var book = new Book();
book.Price = 10; //these is the values
book.Price2 = 20;
var check = new Check();
var calculated = result.Calculate(book);
Console.WriteLine(calculated);

让我们改进

A. (Best?)Check是计算器

public class Check  // Not a book
{
    public static int Calculate(Book book)
    {
        var p = book.Price;
        var p2 = book.Price2;
        var total = p + p2;

        Console.WriteLine(total);
        return total;
    }
}

(...)

var calculated = Check.Calculated(book); // no: new Check()

B. 如果CheckBook.

Check不是a ,它可以拥有Book

public class Product
{
    public string Title { get; set; }
    public int Price { get; set; }
}

public class Book : Product
{
    public string Isbn { get; set; }
    public int Price2 { get; set; }
}

public class Check
{
    private readonly Book book;
    public Check(Book book) 
    {
       this.book = book;  
    }
    public int Calculate() => book.Price + book.Price2;
}

class Program
{
    static void Main(string[] args)
    {
        var book = new Book();
        book.Price = 10;
        book.Price2 = 20;
        var check = new Check(book);

        Console.WriteLine(check .Calculate());
    }
}

3 C. 如果CheckBook

如果Check aBook它需要存储PricePrice2。请考虑以下示例。

public class Product
{
    public Product() { }
    public Product(string title, int price)
    {
        Title = title;
        Price = price;
    }

    public string Title { get; set; }
    public int Price { get; set; }
}

public class Book : Product
{
    public Book(Book book) : base(book.Title, book.Price)
    {
        Isbn = book.Isbn;
        Price2 = book.Price2;
    }

    public Book() { }

    public string Isbn { get; set; }
    public int Price2 { get; set; }
}

public class Check : Book
{
    public Check(Book book) : base(book)
    {
        // This should really call Book's contrcutor
    }
    public int Calculate() => Price + Price2;
}

class Program
{
    static void Main(string[] args)
    {
        var b = new Book();
        b.Price = 10;
        b.Price2 = 20;
        var c = new Check(b);

        Console.WriteLine(c.Calculate());
    }
}

推荐阅读