让我了解面向对象的编程

nLL*_*nLL 11 c# oop object

我是入门级.Net开发人员并使用它来开发网站.我从经典的asp开始,去年用一本简短的C#书跳上了船.随着我的发展,我学到了更多,并开始看到来自经典的asp我总是使用C#像脚本语言.例如,在我的上一个项目中,我需要在网络服务器上对视频进行编码并编写类似的代码

public class Encoder
{
    Public static bool Encode(string videopath) {

        ...snip...

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

在搜索与我的项目相关的样本时,我看到有人这样做

public class Encoder
{
    Public static Encode(string videopath) {
        EncodedVideo encoded = new EncodedVideo();

        ...snip...

        encoded.EncodedVideoPath = outputFile;
        encoded.Success = true;

        ...snip...
    }
}

public class EncodedVideo
{
    public string EncodedVideoPath { get; set; }
    public bool Success { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,第二个例子是面向对象的,但我没有看到使用EncodedVideo对象的意义.

难道我做错了什么?是否真的有必要在Web应用程序中使用这种代码?

bri*_*ley 6

有人曾经向我解释过OO作为汽水罐.

苏打罐是一个对象,一个对象有很多属性.还有很多方法.例如..

SodaCan.Drink();

SodaCan.Crush();

SocaCan.PourSomeForMyHomies();

等等...

理论上,OO设计的目的是编写一行代码,并在对象之间进行抽象.

这意味着Coder.Consume(SodaCan.contents); 与你的问题有关.

编码视频与编码器不同.编码器返回编码视频.编码视频可以使用编码器,但它们是两个单独的对象.因为它们是服务于不同功能的两个不同实体,它们只是一起工作.

就像我吃苏打水一样,并不意味着我是一个汽水罐.

  • 苏打水的东西真的不是最好的比喻.非访问器方法应该是对象可以执行的操作.苏打水不能喝任何东西,所以它有一个`Drink()`方法是没有意义的.`Coder.Consume(SodaCan.Contents)`在这方面更有意义. (3认同)