所以我一直在這個項目上掙扎的一個實例,我需要幫助。看到我試圖讓我的主程序從三個文件中讀取:MyFileReader,MyCSVReader和MyMorgReader。CS0144 - C# - 不能爲近一個星期現在創建抽象類或接口
在我的主程序,我試圖用一個新的MorgReader可以從文本文件閱讀和文本文件轉化爲基於文本文件中的模擬器一起創建一個新的模擬器。
這是我在我的程序的主文件中寫道:
的Program.cs:
class Program
{
static void Main(string[] args)
{
...
...
Simulator sim = new Simulator(Morg1, Morg2, Morg3, Morg4);
MorgReader mr = new MorgReader(new MyCSVReader(new FileReader("C:\\Users\\miiwo\\Dropbox\\Morg.txt")));
Morg m;
while (m = mr.ReadMorg() != null)
{
sim.Add(m);
}
sim.run();
但三件事情不工作:該行開始與MorgReader mr
,while循環和循環內的Add函數。第一個問題產生CS0144代碼是「無法創建抽象類或接口‘MorgReader’的一個實例,我想這最後兩個問題,因爲第一個,我不知道。
我的MorgReader是一個抽象類,而不是一個接口,但我試圖創建另一個基於我的MorgReader抽象類的類,然後從那裏生成一個新的MorgReader,但是在我的嘗試中生成了更多的錯誤。
我工作有四個文件:Program,MyFileReader.cs,MyCSVReader.cs和MyMorgReader.cs。也許問題的根源可能在於我不確定的這些文件中的任何一個,不要擔心,它們不是太多, Program.cs除外,爲了時間的原因我只發佈了一部分。
個MyFileReader.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace homework3
{
//*FILE READER CLASS*//
class FileReader : MorgReader
{
//Member Variables
private StreamReader streamReader;
//FileReader function
public FileReader(string fileName)
{
streamReader = System.IO.File.OpenText(fileName);
if (streamReader == null)
throw new Exception("OpenRead() failed for file " + fileName);
}
//Read function
public override string Read()
{
System.IO.StreamReader myFile = new System.IO.StreamReader("C:\\Users\\miiwo\\Dropbox\\Morg.txt");
string myString = myFile.ReadLine();
return streamReader.ReadLine();
}
//Close function
public override void Close()
{
streamReader.Close();
}
}
//*end of MyFileReader class*//
}
MyCSVReader.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace homework3
{
//*MY CSV READER CLASS*//
class MyCSVReader: ReaderDecorator
{
//Member Variables
string[] buf;
char[] delimiterSplit = { ',' };
char[] delimiterAbsorbs = { ' ' };
int index;
//My Csv Reader base
public MyCSVReader(MorgReader wrapped) : base(wrapped)
{
}
//Read Function
protected override string ReadImpl()
{
if (buf == null)
{
String line = Wrapped.Read();
buf = line.Split(delimiterSplit);
index = 0;
}
return buf[index++];
}
//Close Function
public override void Close()
{
WrappedReader.Close();
}
}
//*end of CSV class*//
}
MyMorgReader.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace homework3
{
//*MY MORG READER CLASS*//
abstract class MorgReader
{
//Member Variables
public abstract string Read();
abstract public void Close();
}
//*end of morg reader class*//
//*MY READER DECORATOR CLASS*//
abstract class ReaderDecorator : MorgReader
{
//Member Variables
protected abstract string ReadImpl();
private MorgReader WrapDecorator;
protected ReaderDecorator(MorgReader wrapped)
{
WrapDecorator = wrapped;
}
//WrappedReader function
protected MorgReader WrappedReader
{ get { return WrapDecorator; } }
//Read function
public override string Read()
{
var wrapped = WrappedReader.Read();
if (!string.IsNullOrEmpty(wrapped))
{ wrapped += ","; }
return wrapped + ReadImpl();
}
//Wrapped function
protected MorgReader Wrapped
{
get { return WrapDecorator; }
}
}
//*end of My Reader Decorator Class*//
}
請讓我知道如果你需要米關於我的問題的礦石信息。我很樂意承認。我只是想徹底擺脫這個錯誤。
預先感謝您。
爲什麼'MorgReader'是一個抽象類?如果將其抽象化是有意義的,爲什麼要嘗試實例化它?此外,請嘗試只包含代碼的相關部分(在這種情況下,'MorgReader'(你不包括)),並且只有引起錯誤的行'MorgReader mr = new MorgReader(new MyCSVReader(new FileReader(「 C:\\ Users \\ miiwo \\ Dropbox \\ Morg.txt「)));') – Rob
'MorgReader'是抽象的,也就是說它的方法只是一個沒有實現的簽名。如果你調用'mr.Read()',你正在調用一個沒有實現的方法,這就是爲什麼當你試圖創建一個抽象類的實例時,編譯器會產生一個錯誤。你爲什麼試圖直接創建一個'MorgReader'而不是'MyCSVReader'? – KMoussa
也見http://stackoverflow.com/questions/16342494/why-abstract-class-cannot-be-instantiated-what-is-the-use-of-a-class-which-cann,http:// stackoverflow .com/questions/2308786/abstract-classes-and-interfaces-in-c-sharp,http://stackoverflow.com/questions/6611412/cannot-create-an-instance-of-the-abstract-class-or -接口 – Fiddles