在 c# 中找不到默认接口 class
Default interface not found in c# class
我在 VS 16.5.1 上的控制台应用程序 .net core 3.1 中拥有这段代码:
namespace DefaultInterfaceTest
{
class Program
{
static void Main(string[] args)
{
var person = new Person();
person.GetName();//error here
}
}
public interface IPerson
{
string GetName()
{
return "Jonny";
}
}
public class Person: IPerson
{
}
}
我希望我可以访问此人本身的默认实现 oif GetName,因为它是一个 public 方法,但它会产生此错误:
'Person' does not contain a definition for 'GetName' and no accessible extension method 'GetName' accepting a first argument of type 'Person' could be found (are you missing a using directive or an assembly reference?)
如何从外部代码或 Person class 本身访问接口的默认实现?谢谢!
您只能通过接口引用调用来访问默认实现方法(将它们视为显式实现的方法)。
例如:
// This works
IPerson person = new Person();
person.GetName();
但是:
// Doesn't works
Person person = new Person();
person.GetName();
如果您想从 class 中调用默认接口方法,那么您需要将 this
转换为 IPerson
才能这样做:
private string SomeMethod()
{
IPerson self = this;
return self.GetName();
}
如果您使用接口,就没有办法解决这个问题。如果你真的想要这种行为,那么你需要使用抽象 class 其中 GetName
是一个虚拟方法。
abstract class PersonBase
{
public virtual string GetName()
{
return "Jonny";
}
}
正在铸造一些你可以在你的情况下使用的东西吗?
using System;
namespace DefaultInterfaceTest
{
class Program
{
static void Main(string[] args)
{
IPerson person = new Person();
Person fooPerson = (Person) person;
Console.WriteLine(person.GetName());
Console.WriteLine(fooPerson.Foo());
}
}
public interface IPerson
{
public string GetName()
{
return "Jonny";
}
}
public class Person: IPerson
{
public string Foo()
{
return "Hello";
}
}
}
我在 VS 16.5.1 上的控制台应用程序 .net core 3.1 中拥有这段代码:
namespace DefaultInterfaceTest
{
class Program
{
static void Main(string[] args)
{
var person = new Person();
person.GetName();//error here
}
}
public interface IPerson
{
string GetName()
{
return "Jonny";
}
}
public class Person: IPerson
{
}
}
我希望我可以访问此人本身的默认实现 oif GetName,因为它是一个 public 方法,但它会产生此错误:
'Person' does not contain a definition for 'GetName' and no accessible extension method 'GetName' accepting a first argument of type 'Person' could be found (are you missing a using directive or an assembly reference?)
如何从外部代码或 Person class 本身访问接口的默认实现?谢谢!
您只能通过接口引用调用来访问默认实现方法(将它们视为显式实现的方法)。
例如:
// This works
IPerson person = new Person();
person.GetName();
但是:
// Doesn't works
Person person = new Person();
person.GetName();
如果您想从 class 中调用默认接口方法,那么您需要将 this
转换为 IPerson
才能这样做:
private string SomeMethod()
{
IPerson self = this;
return self.GetName();
}
如果您使用接口,就没有办法解决这个问题。如果你真的想要这种行为,那么你需要使用抽象 class 其中 GetName
是一个虚拟方法。
abstract class PersonBase
{
public virtual string GetName()
{
return "Jonny";
}
}
正在铸造一些你可以在你的情况下使用的东西吗?
using System;
namespace DefaultInterfaceTest
{
class Program
{
static void Main(string[] args)
{
IPerson person = new Person();
Person fooPerson = (Person) person;
Console.WriteLine(person.GetName());
Console.WriteLine(fooPerson.Foo());
}
}
public interface IPerson
{
public string GetName()
{
return "Jonny";
}
}
public class Person: IPerson
{
public string Foo()
{
return "Hello";
}
}
}