C#创建一个列表,其中包含不同方法的可访问变量
我是一名编程新手(尤其是C#),这是我的问题。 我需要创建一个带有变量的类,这些变量可以在不同的类中访问/引用/使用,我已经尝试了我认为所有的东西(接口、抽象类、列表),但仍然无法使它工作 下面是最后一段代码片段,其中包含了最新的想法:C#创建一个列表,其中包含不同方法的可访问变量,c#,syntax,interface,abstract-class,C#,Syntax,Interface,Abstract Class,我是一名编程新手(尤其是C#),这是我的问题。 我需要创建一个带有变量的类,这些变量可以在不同的类中访问/引用/使用,我已经尝试了我认为所有的东西(接口、抽象类、列表),但仍然无法使它工作 下面是最后一段代码片段,其中包含了最新的想法: abstract class FuelsList { string sFuelName; float fFuelPrice; void LPG() { sFuelName = "LPG"; fFu
abstract class FuelsList
{
string sFuelName;
float fFuelPrice;
void LPG()
{
sFuelName = "LPG";
fFuelPrice = 0.65f;
}
void Diesel()
{
sFuelName = "Diesel";
fFuelPrice = 0.95f;
}
void Petrol()
{
sFuelName = "Petrol";
fFuelPrice = 1.15f;
}
}
然后使用类似的列表,我想在其他类中引用它(如果我记得很清楚的话),如下所示:
Console.WriteLine("This pump dispenses {0} and the price is {1} per litre.",
FuelsList.Petrol.sFuelName, FuelsList.Petrol.sFuelPrice);
var petrol = new Petrol(1.15M);
var diesel = new Diesel(0.95M);
var lpg = new Lpg(0.65M);
System.Diagnostics.Debug.Print(@"My fuels: " +
Environment.NewLine + string.Join(
Environment.NewLine, new[] { petrol.ToString(), diesel.ToString(), lpg.ToString() }));
我不确定我是想重新发明一个轮子,还是想做600%的工作,而这要容易得多。问题是我需要很多类、接口、继承和私有字段可以通过访问器访问,因为这是多态性和字段访问练习。此外,我还需要创建类似的内容,但使用的CarTypes将包含FuelUsed、TankCapacity等内容,但一旦我理解了上面的示例,就很容易了
我试着查看其他的讨论和问题,以及其他网站,但没有找到任何解决方案。提前谢谢大家。这可能就是您要找的。下面是基本类
燃油:
public abstract class Fuel
{
public string Name { get; private set; }
public decimal Price { get; private set; }
public override string ToString()
{
return string.Format(@"Name: {0} Price: {1}", Name, Price.ToString("C"));
}
protected Fuel(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
}
每种燃料类型都是从中衍生出来的一类:
public class Petrol : Fuel
{
public Petrol(decimal price) : base("Petrol", price) { }
}
public class Diesel : Fuel
{
public Diesel(decimal price) : base("Diesel", price) { }
}
public class Lpg : Fuel
{
public Lpg(decimal price) : base("LPG", price) { }
}
然后您可以使用它们,例如:
Console.WriteLine("This pump dispenses {0} and the price is {1} per litre.",
FuelsList.Petrol.sFuelName, FuelsList.Petrol.sFuelPrice);
var petrol = new Petrol(1.15M);
var diesel = new Diesel(0.95M);
var lpg = new Lpg(0.65M);
System.Diagnostics.Debug.Print(@"My fuels: " +
Environment.NewLine + string.Join(
Environment.NewLine, new[] { petrol.ToString(), diesel.ToString(), lpg.ToString() }));
创建两个类-一个用于存储燃料
对象,另一个用于存储不同类型的对象。然后,只需使用属性而不是方法(这就是你要做的,你的语法错了)
然后,您可以按照预期使用它:
Console.WriteLine("This pump dispenses {0} and the price is {1} per litre.",
FuelsList.Petrol.Name, FuelsList.Petrol.Price);
请不要只是复制/粘贴,你不会从中学到任何东西。理解这段代码,就像你说的,剩下的练习将很简单
public class Fuel
{
private string sFuelname = default(string);
private float Price = default(float);
public string FuelName
{
get { return sFuelName; } set { sFuelName = value; }
}
public float FuelPrice
{
get { return fFuelPrice; } set { fFuelPrice= value; }
}
public static class FuelsList
{
public Fuel LPG
{
get
{
var temp = new Fuel
{
FuelName = "LPG",
FuelPrice = 0.65f
}
return temp;
}
}
public Fuel Diesel
{
get
{
var temp = new Fuel
{
FuelName = "Diesel",
FuelPrice = 0.95f
}
return temp;
}
}
public Fuel Petrol
{
get
{
var temp = new Fuel
{
FuelName = "Petrol",
FuelPrice = 1.15f
}
return temp;
}
}
}
用法:
Console.WriteLine("This pump dispenses {0} and the price is {1} per litre.", FuelsList.Petrol.FuelName, FuelsList.Petrol.FuelPrice);
这是我设想的一种方式:
由于液化石油气、汽油和柴油具有相同的属性,但没有默认值,因此我将为它们定义一个基本规则(接口)。如果我对它们中的每一个都有一些默认行为,我就会使用抽象类
public interface IFuel
{
string Name { get; }
float Price { get; }
}
为家庭执行规则
public class LPG : IFuel
{
public string Name => "LPG";
public float Price => 0.65f;
}
public class Diesel : IFuel
{
public string Name => "Diesel";
public float Price => 0.95f;
}
public class Petrol : IFuel
{
public string Name => "Petrol";
public float Price => 1.15f;
}
定义消费者。在这里,我可以选择使用接口以更简单的方式注入依赖对象。consumer对象处理如何使用它所依赖的fuel对象
用法:我可以将任何类型的燃料传递给消费者,我们让每个对象只负责它的工作,没有紧密耦合,更易于阅读和维护
下一个检查点是我的设计是否真的
FuelConsumer consumer = null;
IFuel fuel = null;
// Let's use LPG
fuel = new LPG();
consumer = new FuelConsumer(fuel);
Console.WriteLine(consumer.GetFuelDetails());
// Let's use diesel
fuel = new Diesel();
consumer = new FuelConsumer(fuel);
Console.WriteLine(consumer.GetFuelDetails());
// Let's use petrol
fuel = new Petrol();
consumer = new FuelConsumer(fuel);
Console.WriteLine(consumer.GetFuelDetails());