7 Replies - 307 Views - Last Post: 09 June 2019 - 11:51 PM Rate Topic: -----

#1 Realme   User is offline

  • D.I.C Head

Reputation: -9
  • View blog
  • Posts: 147
  • Joined: 22-May 19

abstract class

Posted 07 June 2019 - 11:06 AM

Hi,

is this abstract now? I just changed the name:

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

abstract class Bok : IEquatable<Bok>
{
    public Bok(string partName, string partTitel, string partRoman, string partNovell, string partTidskrift, int partId)
    //Tilldelningar
    {
        Serie = partName;
        Titel = partTitel;
        Roman = partRoman;
        Novell = partNovell;
        Tidskrift = partTidskrift;
        // Tilldelning av funktion, strängar
        Märke = partId;
        //Tilldelning av intfunktion
    }

    public Bok()
    {
    }
    public string Serie { get; set; }
    // Ger stringen en  taemot funktion
    public string Titel { get; set; }
    //Ger strängen titel taemot egenskap
    public string Roman { get; set; }
    //Tilldelar stringen Roman get set egenskap
    public string Novell { get; set; }
    // ----||--- samma
    public string Tidskrift { get; set; }
    //---||---- Samma
    public int Märke { get; set; }
    // Här tilldelas int 'Märke' egenskapen att kunna framkalla innehåll
    public override string ToString()
    {
        return "Författaren: " + Serie + "  Titel: " + Titel + "  Boktyp: " + Roman + Novell + Tidskrift + "    Utgivningsår:  " + Märke;
    }
    public override bool Equals(object obj)
    {
        if (obj == null) return false;
        Bok objAsPart = obj as Bok;
        if (objAsPart == null) return false;
        else return Equals(objAsPart);
    }
    public override int GetHashCode()
    {
        return Märke;
    }
    public bool Equals(Bok other)
    {
        if (other == null) return false;
        return (this.Märke.Equals(other.Märke));
    }
    // Should also override == and != operators.

}
 class Författare : Bok
{
    public string Romanen;
    public Författare(string Serie, string Titel, string Roman, string Novell, string Tidskrift, int Märke) :
        base(Serie, Titel, Roman, Novell, Tidskrift, Märke)
    //Framkallning av sträng samt intobjekt i underklassen 'Författaren'
    { Romanen = "  Roman"; }
    //Konstruktor
}

 class Titel : Bok
{
    public string Tidskriften;
    public Titel(string Serie, string Titel, string Roman, string Novell, string Tidskrift, int Märke) :
        base(Serie, Titel, Roman, Novell, Tidskrift, Märke)
    //framkallning av sträng samt intobjekt i underklassen 'Titel'

    { Tidskriften = "Tidskrift"; }
    //Konstruktor, här anges om boken är Tidskrift
}
 class Utg : Bok
{
    public string Novellsamling;
    public Utg(string Serie, string Titel, string Roman, string Novell, string Tidskrift, int Märke) :
        base(Serie, Titel, Roman, Novell, Tidskrift, Märke)
    //Framkallning av strängar samt int i underklassen 'Utg*

    { Novellsamling = "Novellsamling"; }
    //Constructor, här anges det om boken är novellsamling
}

public class Bibliotekarie 
{
    private List<Bok> parts = new List<Bok>();
    // Boklistan "parts" i Biblotekarieklassen
    Författare Författaren = new Författare("Skriv in författaren: ", "Författaren är: ", "", "", "Boktypen är: ", 150);
    Utg Utgivning = new Utg("Skriv in Titel", "Titeln är: ", "QQ", "", "", 150);
    Titel Titeln = new Titel("Skriv in Titel", "Titeln är: ", "QQ", "", "", 150);
    public void LäggTillBok()
    {
       
        string t = Console.ReadLine();
        Int32.TryParse(t, out int typ);

        if (typ ==1)
        {
            LäggTillRoman();
        }
       else if(typ ==2)
        {
            LäggTillNovell();
        }
       else if(typ == 3)
        {
            LäggTillTidskrift();
        }
    }
    public void LäggTillRoman()
    {
        // Här lägger vi boken i "Roman" kategorin
        Console.WriteLine(Författaren.Serie); // Utskrift
        Console.WriteLine(Titeln.Serie);
        Console.WriteLine("Skriv in utgivningsår: ");
        parts.Add(new Bok() { Serie = Console.ReadLine(), Titel = Console.ReadLine(), Roman = Författaren.Romanen, Märke = Int32.Parse(Console.ReadLine()) });
        // Inläsning som sedan läggs in i listan under kategorin "Roman"
    }
    public void LäggTillNovell()
    {
        Console.WriteLine(Författaren.Serie);
        Console.WriteLine(Titeln.Serie);
        Console.WriteLine("Skriv in utgivningsår: ");
        parts.Add(new Bok() { Serie = Console.ReadLine(), Titel = Console.ReadLine(), Novell = Utgivning.Novellsamling, Märke = Int32.Parse(Console.ReadLine()) });
        // Inläsning som läggs in under kategorin "Novellsamling" I listan "parts"
    }
    public void LäggTillTidskrift()
    {
        Console.WriteLine(Författaren.Serie);
        Console.WriteLine(Titeln.Serie);
        Console.WriteLine("Skriv in utgivningsår: ");
        parts.Add(new Bok() { Serie = Console.ReadLine(), Titel = Console.ReadLine(), Tidskrift = Titeln.Tidskriften, Märke = Int32.Parse(Console.ReadLine()) });
        //Inläsning som sedan läggs in under kategorin Tidskrift I listan "parts"
    }

    public void Utskrift()
    {
        // Utskrift skriver ut all innehåll med hälp av foreach satsen
        foreach (Bok aPart in parts)
        {
            Console.WriteLine(aPart);
            //Innehåll
        }
    }

    public void Radera()
    {
        //Raderar all innehåll med hjälp av "for" loop
        for (int i = 0; i < parts.Count; i++)
        {
           parts.RemoveAt(i);
            //Raderingen
        }
    }
    public void Sök()
    {
        // Söker utgivningsår int32
        Console.WriteLine("Skriv in utgivningsår: ");
        string read = Console.ReadLine();
        Int32.TryParse(read, out int P);
        parts.Contains(new Bok { Märke = P });
        //Söker i listan " parts" med hjälp av Contains funktionen
        Console.WriteLine("\n Bok med utgivningsår:  " + P + " {0}",
            parts.Exists(x => x.Märke == P)) ;
        // Om utgivningsåren finns jämförden med sökningen
        if (parts.Exists(x => x.Märke == P))
        {
            Console.WriteLine("Boken finns! ");
            // Utskriftsmeddelande om utgivningsåren finns med i listan
        }
        if (parts.Exists(x => x.Märke != P))

        {
            // Utskriftsmeddelande om utgivningsåren inte finns med i listan
            Console.WriteLine("Boken Finns inte ");
        }
        
    }
}
public class Example
{

    public static void Main()
    {
  
        Bibliotekarie Bib = new Bibliotekarie();
        do
        { // do Loop
            try
            {
                
                //Huvudmenyn
                Console.WriteLine("Välkommen");
                Console.WriteLine("[1] Registrera bok");
                Console.WriteLine("[2] Visa böcker");
                Console.WriteLine("[3] Raderar all innehåll");
                Console.WriteLine("[4] Sök utgivningsår");
                Console.WriteLine("[ESC] Avsluta");
                string Read = Console.ReadLine();
                //Inläsning av huvudmeny inmatningen
                Int32.TryParse(Read, out int P);
                switch (P)
                {
                    case 1:
                        //Val 1 i början av programmet
                        Console.WriteLine("Vilken Boktyp är detta? ");
                        Console.WriteLine("[1] Roman");
                        Console.WriteLine("[2] Novellsamling");
                        Console.WriteLine("[3] Tidskrift");
                        // Menykommentar
                        Bib.LäggTillBok();
                        Bib.Utskrift();

                        break;
                    case 2:
                        // Skriver ut all innehåll med hjälp av metodframkallning Bib.Utskrift();
                       Bib.Utskrift();
                        
                        break;
                    case 3:
                        //Raderar all innehåll genom framkallning av metoden Radera();
                        Bib.Radera();
                       
                        break;
                    case 4:
                        // Framkallar Sök metoden i Biblotekarien
                        Bib.Sök();
                        break;
                }

            }
            catch
            {
                //Framkallning av feltext vid felinmatning i 'utgivningsdatum'
                Console.WriteLine("Du skrev inget nummer");
            }
        }
        while (Console.ReadKey().Key != ConsoleKey.Escape);
        // Avslutning av programmet genom att trycka ESC
    }
}


The problem I am facing now is that I cant add "parts". Please run on your computer and see the error message.

2 questions:

1. Is this abstract now?
2, Why am I not allowed to add parts when I change it to abstract?

This post has been edited by Realme: 07 June 2019 - 11:07 AM


Is This A Good Question/Topic? 0
  • +

Replies To: abstract class

#2 modi123_1   User is offline

  • Suitor #2
  • member icon



Reputation: 15113
  • View blog
  • Posts: 60,464
  • Joined: 12-June 08

Re: abstract class

Posted 07 June 2019 - 11:09 AM

Quote

Please run on your computer and see the error message.

I would suggest copy/pasting the errors you are getting for folk to read if they are not at a PC.

I suggest reading up on 'abstract' classes.

First line is telling.

Quote

The abstract keyword enables you to create classes and class members that are incomplete and must be implemented in a derived class.


https://docs.microso...d-class-members
https://docs.microso...ywords/abstract
Was This Post Helpful? 0
  • +
  • -

#3 Realme   User is offline

  • D.I.C Head

Reputation: -9
  • View blog
  • Posts: 147
  • Joined: 22-May 19

Re: abstract class

Posted 07 June 2019 - 11:11 AM

Okay indeed it is abstract now so I don't need to add "public" instead.

error message:

"Cannot create an instance of an abstract class or interface "Bok"
Was This Post Helpful? 0
  • +
  • -

#4 modi123_1   User is offline

  • Suitor #2
  • member icon



Reputation: 15113
  • View blog
  • Posts: 60,464
  • Joined: 12-June 08

Re: abstract class

Posted 07 June 2019 - 11:20 AM

So that error, with that first line from the MSDN docs, should clue you in on what's going on. Just slapping 'abstract' in front of something will not make it so. It has to follow a specific structure, and then another class goes about implementing the abstract class to make it real.


    abstract class Animal
    {
        protected string _type;
        public abstract string MakeNoise();// no implementation of function in abstract
    }

    class Monkey : Animal
    {
        public Monkey()
        {
            _type = "Monkey";
        }
        public override string MakeNoise()// implementation
        {
            return $"{_type} screeches!";
        }
    }

        public void Main()
        {
            Monkey foo = new Monkey();
            Console.WriteLine(foo.MakeNoise());
}

Was This Post Helpful? 0
  • +
  • -

#5 Skydiver   User is online

  • Code herder
  • member icon

Reputation: 6968
  • View blog
  • Posts: 23,684
  • Joined: 05-May 12

Re: abstract class

Posted 07 June 2019 - 08:38 PM

Actually, in C# all you need to make a class abstract is to declare it abstract. This is different from C++ where you need at least one pure virtual function declared within the class.

So the following:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace SimpleCSConsole
{
    abstract class Foo
    {
    }

    class Program
    {
        static void Main()
        {
            var foo = new Foo();
        }
    }
}


will result in the error:
Error	CS0144	Cannot create an instance of the abstract class or interface 'Foo'



As mentioned above, you can instantiate concrete classes, so the following will compile without problems:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace SimpleCSConsole
{
    abstract class Foo
    {
    }

    class Bar : Foo
    {
    }

    class Program
    {
        static void Main()
        {
            var bar = new Bar();
        }
    }
}



View PostRealme, on 07 June 2019 - 02:06 PM, said:

The problem I am facing now is that I cant add "parts".

Which is exactly what I told you would happen in the other thread:

View PostSkydiver, on 06 June 2019 - 09:39 AM, said:

Try declaring the Bok class as abstract. What that will do is prevent you from instantiating that base class, but still let you instantiate the descendant classes.

Was This Post Helpful? 1
  • +
  • -

#6 Realme   User is offline

  • D.I.C Head

Reputation: -9
  • View blog
  • Posts: 147
  • Joined: 22-May 19

Re: abstract class

Posted 08 June 2019 - 08:33 AM

Hi,

I don't understand how this is supposed to be implemented when making "abstract class"

parts.Add(new Bok() { Serie = Console.ReadLine(), Titel = Console.ReadLine(), Novell = Utgivning.Novellsamling, Märke = Int32.Parse(Console.ReadLine()) });


I made "serie get set" method and it worked but how is "Bok" supposed to be added to "parts"
Was This Post Helpful? 0
  • +
  • -

#7 Realme   User is offline

  • D.I.C Head

Reputation: -9
  • View blog
  • Posts: 147
  • Joined: 22-May 19

Re: abstract class

Posted 08 June 2019 - 08:45 AM

so far this is what I did:

public string Serie { get; private set; }
    public string Titel { get; private set; }
    public string Roman { get; private set; }
    public int Märke { get; private set; }


parts.Add(  { Serie = Console.ReadLine(); Titel = Console.ReadLine(); Roman = Författaren.Romanen; Märke = Int32.Parse(Console.ReadLine()) });




"There is no argument that corresponds to the required formal parameter "list" of "Bok""
Was This Post Helpful? 0
  • +
  • -

#8 Skydiver   User is online

  • Code herder
  • member icon

Reputation: 6968
  • View blog
  • Posts: 23,684
  • Joined: 05-May 12

Re: abstract class

Posted 09 June 2019 - 11:51 PM

Yes, that is the correct word message because that list will only take objects of the type Bok or its descendants. Your code is not providing such an object.

Since the base class is abstract, then you will have to instantiate one of the descendant classes.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1