c#中的分部类可以用来修改功能吗

c#中的分部类可以用来修改功能吗,c#,partial,C#,Partial,我是否可以使用分部类修改函数,比如在一个分部类中声明函数并在另一个分部类中定义函数 public partial class PartialClass { public void showa() { } } public partial class PartialClass { string b = "b"; public void showa() { Console.Write(b); } }

我是否可以使用分部类修改函数,比如在一个分部类中声明函数并在另一个分部类中定义函数

public partial class PartialClass    
{        
    public void showa()
    {

    }
}
public partial class PartialClass
{
    string b = "b";
    public void showa()
    {
        Console.Write(b);
    }
}
或者在另一个分部类中扩展函数的功能

public partial class PartialClass
{
    int a = 10; 
    public void showa()
    {
        Console.WriteLine(a);
    }
}

public partial class PartialClass
{
    string b = "b";
    public void showa()
    {
        Console.WriteLine(a+b);
    }
}
是的,但您也需要使用分部方法:

现在,如果只使用前半部分编译代码,那么
showa()
是一个空方法。如果声明了
showaImpl
实现,则调用存在。如果没有实现,编译器将完全忽略对分部方法的调用,并且由于这个原因,它们不能有访问修饰符、返回值或
out
参数(因为这将使调用方的明确赋值成为噩梦)。

是,但您也需要使用部分方法:


现在,如果只使用前半部分编译代码,那么
showa()
是一个空方法。如果声明了
showaImpl
实现,则调用存在。如果没有实现,编译器将完全忽略对分部方法的调用,因此它们不能有访问修饰符、返回值或
out
参数(因为这将使调用方的明确赋值成为噩梦)。

不是真正的答案,但是,您不能从PartialClass继承,然后重写Showa()的功能吗?为什么不试试呢?写这个问题可能比只把代码写进LINQPad要花更长的时间。而且,你到底想做什么还不清楚。分部类和分部方法用于帮助自动生成代码。它是否编译?我没有检查,但我会说没有。即使可以,这个功能也会非常混乱。为什么不使用
abstract
类和
interface
s呢?这不是一个真正的答案,但是你不能继承PartialClass,然后覆盖Showa()的功能吗?为什么不试试呢?写这个问题可能比只把代码写进LINQPad要花更长的时间。而且,你到底想做什么还不清楚。分部类和分部方法用于帮助自动生成代码。它是否编译?我没有检查,但我会说没有。即使可以,这个功能也会非常混乱。为什么不使用
abstract
类和
interface
s呢?哇,C真的允许吗?不添加此功能,部分类就已经够邪恶的了:(@DavidArno-primary用例是生成的类型(
.designer.cs
等)的扩展点);生成的代码声明分部方法,并在预期位置包含对它们的调用;然后,如果开发人员实现分部类,则调用存在;如果开发人员未实现分部类,则调用不存在。请查看.designer.cs文件中的某些sqlmetal或EF,以了解我的意思。@DavidArno我的意思是,让我们面对它:问题编辑生成的文件和LINQ to SQL等的lem基本上就是为什么首先添加了
部分
功能的原因好的,谢谢Marc。我对这些功能的问题是,它们非常适合它们的预期用途(整洁地处理需要注释的自动生成代码)但是人们有滥用这些功能的习惯。不管怎样,这只是观点,有损于你的回答。因此,+1。哇,C#真的允许吗?部分类已经够邪恶的了,没有添加这个功能:(@DavidArno primary use case是生成类型的扩展点(
.designer.cs
,等等);生成的代码声明分部方法,并在预期位置包含对它们的调用;然后,如果开发人员实现分部类,则调用存在;如果开发人员未实现分部类,则调用不存在。请查看.designer.cs文件中的某些sqlmetal或EF,以了解我的意思。@DavidArno我的意思是,让我们面对它:问题编辑生成的文件和LINQ to SQL等的lem基本上就是为什么首先添加了
部分
功能的原因好的,谢谢Marc。我对这些功能的问题是,它们非常适合它们的预期用途(整洁地处理需要注释的自动生成代码)但是人们有滥用这些特征的习惯。不管怎么说,这只是观点,有损于你的回答。因此,无论如何+1。
public partial class PartialClass    
{        
    public void showa()
    {
        showaImpl();
    }
    partial void showaImpl(); 
}
public partial class PartialClass
{
    string b = "b";
    partial void showaImpl()
    {
        Console.Write(b);
    }
}