0
  • 我有一个 RoundedSum 对象,它基本上检查产品的价格和一个整数和到数据库中。
  • 我有一个 UnRoundedSum 对象,它基本上继承了 RoundedSum 并覆盖了 checkinsum 函数,并将与最接近的整数的差异检查为未计入
  • UnRoundedSum 调用 base 的 checkinsum(productid,int) 将价格值检查到 DB 这是我的命名空间 SumRounding,它有 2 个类

namespace DatabasePricing.SumRounding
{
    public class Roundedsum
    {
        public void checkinsum(int productid,int sum)
        {
            //Checks in price in the price table
            //dbobject("price",productid,sum);
            int temp_int = sum;    
        }
    }

    public class UnRoundedSum : Roundedsum
    {
        public void checkinsum(int productid,float sum)
        {
            //Since the sum is a float it will check the difference 
            //into unroundedsum table in the database 
            int intsum = (int)sum;
            float tempfloat = sum - intsum;
            //Check this remaining float into the database under unaccounted
            // dbobject("unroundedsum",productid,tempfloat);                
            //Now call the integer checksum with the integer value
            checkinsum(productid,intsum);
        }
    }
}

这让我们假设我现在为测试 rite 创建了一个主要功能,因为它在我的项目中不起作用。这就像上述类的测试对象。

using DatabasePricing.SumRounding;
    namespace DatabasePricing
    {
        class testingrounding
        {
            static void Main() { 
            int product_id = 1;
            float float_value = 1.1f;
            UnRoundedSum obj1 = new UnRoundedSum();
            //This call produces StackOverflow Exception
            obj1.checkinsum(1, float_value);
            int price = 200;
            //I tried with integer value to test RoundedSum object
            //it is still throwing an exception
            //This call also produces StackOverflow Exception
            obj1.checkinsum(1, price);        
            }
        }
    }

堆栈溢出异常图像


当我尝试调试时,它总是在 checkinsum() 引发 StackOverflow 错误之前被捕获。当我尝试调试时,即使在执行后它也会返回到 checkinsum() 中。由于某种原因,它不断回来。我不知道会出什么问题。

4

3 回答 3

4
    checkinsum(productid,intsum);

应该

    base.checkinsum(productid,intsum);

在 UnRoundedSum 类中

编辑:解释,没有基础。(这是去基类,然后调用那里的方法)它会在UnRoundedSum中调用自己,所以这将是一个无限循环,会导致stackoverflow

编辑2:

阅读您的评论后,我认为您想要这个:

public class sum
{
    public void checkinsum(int productid, float sum)
    {
        //Since the sum is a float it will check the difference 
        //into unroundedsum table in the database 
        int intsum = (int)sum;
        float tempfloat = sum - intsum;
        //Check this remaining float into the database under unaccounted
        // dbobject("unroundedsum",productid,tempfloat);                
        //Now call the integer checksum with the integer value
    }
    public void checkinsum(int productid, int sum)
    {
        //Checks in price in the price table
        //dbobject("price",productid,sum);
        int temp_int = sum;
    }
}

然后它将执行您想要的方法,或者它是 int int 或 int float。

于 2013-01-31T18:35:26.837 回答
1

你有一个无限递归调用checkinsum

你可能想base.checkinsum打电话UnRoundedSum.checkinsum

public void checkinsum(int productid,float sum)
{
    //Since the sum is a float it will check the difference 
    //into unroundedsum table in the database 
    int intsum = (int)sum;
    float tempfloat = sum - intsum;
    //Check this remaining float into the database under unaccounted
    // dbobject("unroundedsum",productid,tempfloat);                
    //Now call the integer checksum with the integer value
    base.checkinsum(productid,intsum);
}
于 2013-01-31T18:34:26.310 回答
1

C# 标准规定“如果派生类中的任何方法适用,则基类中的方法不是候选方法”。换句话说,调用时checkinsum(int,float)总是优先于base.checkinsum(int,int)调用checkinsum(1,1),因为前者在派生类中,而 C# 允许将 anint隐式转换为 a float

请参阅:http: //blogs.msdn.com/b/ericlippert/archive/2007/09/04/future-break-changes-part-three.aspx

于 2013-01-31T18:54:46.487 回答