下面的代碼產生這樣的輸出罰款:如何使用字符串實例化對象並在C#中發送參數?
This is page one.
This is page two.
但是我怎麼改變它,以便PageItem對象實例化動態從List<string>
?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestInstant
{
class Program
{
static void Main(string[] args)
{
List<string> pageItemsIdCodes = new List<string>() { "PageItem1", "PageItem2" };
PageItemManager pageItemManager = new PageItemManager(pageItemsIdCodes);
pageItemManager.DisplayMenu();
Console.ReadLine();
}
}
class PageItemManager
{
private Dictionary<string, BasePageItem> PageItemRecords = new Dictionary<string, BasePageItem>();
public PageItemManager(List<string> pageItemsIdCodes)
{
//manually
PageItemRecords.Add("PageItem1", new PageItem1(this));
PageItemRecords.Add("PageItem2", new PageItem2(this));
//HOW DO i DO THIS DYNAMICALLY:
//PSEUDO-CODE:
//foreach (string pageItemIdCode in pageItemsIdCodes)
//{
// Type t = Type.GetType(pageItemIdCode);
// //ERROR: Cannot implicitly convert type 'TestInstant.PageItemManager' to 'TestInstant.BasePageItem'
// BasePageItem pageItem = Activator.CreateInstance(t, new BasePageItem[] { this });
// PageItemRecords.Add(pageItemIdCode, pageItem);
//}
//Type t = Type.GetType(pageItemIdCode);
//ERROR: Cannot implicitly convert type 'object' to 'TestInstant.BasePageItem'.
//BasePageItem pageItem = Activator.CreateInstance(t); // Change constructor
//pageItem.PageItemManager = this; // Add SetMananger call to BasePageItem
//PageItemRecords.Add(pageItemIdCode, pageItem);
}
public void DisplayMenu()
{
foreach (var pageItemRecord in PageItemRecords)
{
Console.WriteLine(pageItemRecord.Value.Title);
}
}
}
class BasePageItem
{
public string Title { get; set; }
protected PageItemManager pageItemManager;
public BasePageItem(PageItemManager pageItemManager)
{
this.pageItemManager = pageItemManager;
}
}
class PageItem1 : BasePageItem
{
public PageItem1(PageItemManager pageItemManager)
: base(pageItemManager)
{
Title = "This is page one.";
}
}
class PageItem2 : BasePageItem
{
public PageItem2(PageItemManager pageItemManager)
: base(pageItemManager)
{
Title = "This is page two.";
}
}
}
該代碼得到的錯誤是,期望BasePageItem和我們發送對象,我在我的例子中相應地改變它,但仍然無法獲得正確的語法。 –
將其轉換爲BasePageItem。 – Groo
我想發送「this」作爲正在實例化的類的*參數*,它繼承* BasePageItem,因爲BasePageItem在其構造函數中需要PageItemManager,而不是BasePageItem本身。 –