我们可以在struct中实现多态吗?

时间:2015-07-13 12:20:17

标签: oop c#-4.0

我确信这是一个低级别的问题,但我无法找到这个问题的答案。

我认为结构不支持多态性,但我的高级(在一次采访中)说这是可能的。

有人可以告诉我吗?

4 个答案:

答案 0 :(得分:0)

我认为你的意思是运行时多态(方法重载)。我不认为你可以用Structs做到这一点,因为结构不支持继承。

您可能需要参考this articlethis article

答案 1 :(得分:0)

我认为我们可以进行编译时多态,但不能运行Runtime。我尝试了下面的代码,令我惊讶的是它工作了!

我尝试了代码并且编译时允许多态性.Code在下面但是为什么不允许运行时多态性我没有得到它但是现在,我认为我得到了解决方案。

感谢任何评论或指导。

using System;
struct SimpleStruct
{
    private int xval;
    public int X
    {
        get
        {
            return xval;
        }
        set
        {
            if (value < 100)
                xval = value;
        }
    }
    public void DisplayX()
    {
        Console.WriteLine("The stored value is: {0}", xval);
    }
    public void DisplayX(int a)
    {

        Console.WriteLine("The stored value is: {0}", a);
    }
}

class TestClass
{
    public static void Main()
    {
        SimpleStruct ss = new SimpleStruct();
        ss.X = 5;
        ss.DisplayX();
        ss.DisplayX(3);
        Console.ReadLine();
    }
}

答案 2 :(得分:0)

嗯,我正在考虑一个结构可以实现接口......

例如:

public interface IPoint
{
   int X {get;set;}
   int Y {get;set;}
}
public struct Point : IPoint 
{
   public int X { get; set; }
   public int Y { get; set;}
}

public struct AnotherPoint : IPoint
{
     public int X { get; set; }
     public int Y { get; set; }
}

public static void Main () {
    var arr = new IPoint [2];
    arr [0] = new Point () { X = 2 };
    arr [1] = new AnotherPoint () { X = 7 };

    foreach (var p in arr) {
        Console.WriteLine (p.X);
    }
    Console.ReadKey ();
}

答案 3 :(得分:0)

结构支持编译时多态(函数重载和运算符重载),但运行时多态不支持。结构不支持继承,运行时多态是通过基类和派生类的虚函数概念实现的。

由于结构不支持继承,因此它不能支持运行时多态性。