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

我是一名编程新手(尤其是C#),这是我的问题。 我需要创建一个带有变量的类,这些变量可以在不同的类中访问/引用/使用,我已经尝试了我认为所有的东西(接口、抽象类、列表),但仍然无法使它工作

下面是最后一段代码片段,其中包含了最新的想法:

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());