接口/ID可使用对象初始值设定项和属性

本文关键字:属性 ID 可使用 对象 接口 | 更新日期: 2023-09-27 18:32:56

作为在如何构建类或函数/方法(或接口(中回答的问题的后续,以便作为使用的一部分,我可以在{}括号中传递值?,

如何将对象初始值设定项和属性与接口结构结合使用:

public class SomeClassHelper : ISomeClassHelper 
{
}
public class SomeClass: IDisposable
{
    public SomeClass(object somevalue) {
    }
    public int AnotherValue { get; set; }
    public int AdditionalValue { get; set; }
    internal void ImHere() {
        throw new NotImplementedException();
    }
    public void Dispose() {
        throw new NotImplementedException();
    }
}
static void Main(string[] args) {
    object somevalue = null;
    using (var something = new SomeClass(somevalue) { AnotherValue = 1, AdditionalValue = 2 }) {
        something.ImHere();
    }
}
我将如何使用上述内容才能

拥有界面,还是界面的目的破坏了上述内容?

接口/ID可使用对象初始值设定项和属性

我认为您可能误解了接口的目的。

从 https://msdn.microsoft.com/en-us/library/ms173156.aspx:

接口包含类或结构可以实现的一组相关功能的定义。 例如,通过使用接口,可以在类中包含来自多个源的行为。该功能在 C# 中很重要,因为该语言不支持类的多重继承。此外,如果要模拟结构的继承,则必须使用接口,因为它们实际上不能从另一个结构或类继承。

接口

是强制实现它的任何类满足某些条件,以便其他代码可以依赖于该类,该类与实现相同接口的任何其他类具有某些共性。

所以在你的另一个问题中,人们已经回答建议,如果你想使用using块,你的类需要实现IDisposable接口。这是因为,要使using工作,它需要知道它正在使用的类将具有一种称为 Dispose() 的方法,该方法可以释放该类正在使用的任何非托管资源。

如果您的SomeClass没有任何非托管资源,则明智的做法是重新审视您正在尝试执行的操作。当托管对象(如类的实例(停止使用时,垃圾回收器将自动释放它们(我在这里概括一下(。

这确实应该在你的另一个问题上得到回答,但你可能想要探索做的(而不是使用初始值设定项(是为你的类创建一个构造函数,并在实例化你的类时使用它。

你最终会得到如下结果:

    public class SomeClass: IDisposable
    {
        public SomeClass(object somevalue, int anotherValue, int additionalValue)
        {
            AnotherValue = anotherValue;
            AdditionalValue = additionalValue;
        }
        public int AnotherValue { get; set; }
        public int AdditionalValue { get; set; }
        internal void ImHere()
        {
            throw new NotImplementedException();
        }
        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }
    static void Main(string[] args)
    {
        object somevalue = null;
        using (var something = new SomeClass(somevalue, 1, 2))
        {
            something.ImHere();
        }
    }

您可以在 https://msdn.microsoft.com/en-us/library/ms173115.aspx 阅读有关使用构造函数的更多信息。