Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Строки замена и длина строки - полиморфизм


Автор: ArniLand 22.4.2010, 22:28
Написал программу которая заменяет последний символ на первый и измеряет длину строки. Выдает следующие ошибки при компиляции. Помогите их исправить пожалуйста.

Ошибки:
Цитата

c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:"obj\Debug\Laba 2.1 C sharp Masha.exe" /target:exe Program.cs Properties\AssemblyInfo.cs Row.cs
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(14,18): error CS0060: Inconsistent accessibility: base class 'Laba_2._1_C_sharp_Masha.Row' is less accessible than class 'Laba_2._1_C_sharp_Masha.Numeral'
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(8,11): (Related location)
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(40,18): error CS0060: Inconsistent accessibility: base class 'Laba_2._1_C_sharp_Masha.Row' is less accessible than class 'Laba_2._1_C_sharp_Masha.SmallLetters'
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(8,11): (Related location)



Код программы:
Код

//Row.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Laba_2._1_C_sharp_Masha
{
    class Row
    {
        public abstract void LengthofRow();
        public abstract string Right();
    }

    public class Numeral : Row//жалуется на эту строку
    {
        public string Str;

        public Numeral(string pStr)
        {
            Str = pStr;
        }
        ~Numeral()
        {
        }

        public override void LengthofRow()
        {
            Console.WriteLine("Dlina stroki:" + Str.Length);

        }

        public override string Right(string pStr)
        {
            pStr = Str.Replace('5', '1');
            return pStr;
        }
    }


    public class SmallLetters : Row//и жалуется на эту строку
    {
        private string Str_1;

        public SmallLetters(string aStr)
        {
            Str_1 = aStr;
        }

        ~SmallLetters()
        {
        }

        public override void LengthofRow()
        {
            Console.WriteLine("Dlina stroki:" + Str_1.Length);
        }

        public override string Right(string aStr)
        {
            aStr = Str_1.Replace('e', 'a');
            return aStr;
        }
    }
}

//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Laba_2._1_C_sharp_Masha
{
    class Program
    {
        static void Main(string[] args)
        {
            IList<Row> objRow = new List<Row>();
            objRow.Add(new Numeral("12345"));
            objRow.Add(new SmallLetters("abcde"));

            foreach (Row currentRow in objRow)
            {
                Console.WriteLine("Dlina {0}", currentRow.LengthofRow());
                Console.WriteLine("Zamena {0}", currentRow.Right());
            }
        }
    }
}






Автор: diadiavova 22.4.2010, 22:56
класс Row должен быть public abstract.

Автор: ArniLand 22.4.2010, 23:00
diadiavova, сделал
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Laba_2._1_C_sharp_Masha
{
    public abstract class Row
    {
        public abstract void LengthofRow();
        public abstract string Right();
    }

    public class Numeral : Row
    {
        private string Str;

        public Numeral(string pStr)
        {
            Str = pStr;
        }
        ~Numeral()
        {
        }

        public override void LengthofRow()
        {
            Console.WriteLine("Dlina stroki:" + Str.Length);

        }

        public override string Right(string pStr)
        {
            pStr = Str.Replace('5', '1');
            return pStr;
        }
    }


    public class SmallLetters : Row
    {
        private string Str_1;

        public SmallLetters(string aStr)
        {
            Str_1 = aStr;
        }

        ~SmallLetters()
        {
        }

        public override void LengthofRow()
        {
            Console.WriteLine("Dlina stroki:" + Str_1.Length);
        }

        public override string Right(string aStr)
        {
            aStr = Str_1.Replace('e', 'a');
            return aStr;
        }
    }
}

сделал как вы сказали, но теперь выдает такие ошибки. Что оно хочет, не сильно понимаю.
Цитата

D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(32,32): error CS0115: 'Laba_2._1_C_sharp_Masha.Numeral.Right(string)': no suitable method found to override
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(14,18): error CS0534: 'Laba_2._1_C_sharp_Masha.Numeral' does not implement inherited abstract member 'Laba_2._1_C_sharp_Masha.Row.Right()'
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(11,32): (Related location)
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(58,32): error CS0115: 'Laba_2._1_C_sharp_Masha.SmallLetters.Right(string)': no suitable method found to override
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(40,18): error CS0534: 'Laba_2._1_C_sharp_Masha.SmallLetters' does not implement inherited abstract member 'Laba_2._1_C_sharp_Masha.Row.Right()'
D:\Мои документы\Visual Studio 2008\Projects\Laba 2.1 C sharp Masha\Laba 2.1 C sharp Masha\Row.cs(11,32): (Related location) 

Автор: A5uKa 23.4.2010, 07:37
Код

public abstract string Right();
public override string Right(string aStr)


Набор параметров должен быть одинаковым

Автор: diadiavova 23.4.2010, 08:22
ArniLand, ну у тебя в абстрактном классе оперделён метод без параметров, а в производных ты пытаешься переопределить его с параметром pStr, в результате на каждый такой класс получаешь по две ошибки: с одной стороны абстрактный метод без параметров не реализован впроизводном классе, с другой - в производном классе пытаешься перопределить метод, отсутствующий в базовом(точнее метод с таким именем есть, но сигнатура у него другая.
Код

//Row.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


    class Row
    {
        public abstract void LengthofRow();
        public abstract string Right(string pStr);
    }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)