Bất kể đây có phải là một ý tưởng tốt hay không, có thể triển khai giao diện trong đó chức năng thực hiện nhận biết kiểu của đối tượng gọi không?Xác định loại đối tượng gọi trong C#
class A
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class B
{
private C;
public int doC(int input)
{
return C.DoSomething(input);
}
}
class C
{
public int DoSomething(int input)
{
if(GetType(CallingObject) == A)
{
return input + 1;
}
else if(GetType(CallingObject) == B)
{
return input + 2;
}
else
{
return input + 3;
}
}
}
Dường như với tôi như thế này là một thực hành mã hóa xấu (vì các thông số không thay đổi, nhưng đầu ra sẽ) nhưng ngoài việc đó là có thể?
Tôi đang trong một tình huống là tôi muốn có một vài loại cụ thể để có thể gọi một chức năng nhất định, nhưng tôi không thể loại trừ quyền truy cập vào chức năng. Tôi nghĩ về việc có một "loại" tham số
DoSomething(int input, Type callingobject)
Nhưng không có đảm bảo rằng đối tượng gọi điện thoại sẽ sử dụng GetType (này), như trái ngược với GetType (B) để spoof một B bất kể loại riêng của họ.
Điều này có đơn giản (tương đối đơn giản) khi kiểm tra lồng giặt không?
EDIT
hãy bỏ phiếu lên câu trả lời JaredPar (nếu bạn muốn) cũng như John Feminella của. Tôi không thể đánh dấu cả hai câu trả lời như được chấp nhận, và tôi chấp nhận câu trả lời của John Feminella bởi vì nó đặc biệt là những gì tôi yêu cầu, trái ngược với câu trả lời của Jared đã đưa ra một giải pháp mà trước đây tôi chưa từng xem xét.
thể bạn cho một chút nền hơn? Nguyên nhân bây giờ tôi không thấy lý do tại sao bạn không chỉ thực hiện các phương pháp riêng biệt trong C. Một cái gì đó như C.DoSometingA và C.DoSomethingB. Hoặc thậm chí tốt hơn: nhưng hành vi trong các lớp học A & B. –
Phiên bản ngắn là tôi sẽ có 30 hoặc 40 chức năng giống hệt nhau chỉ đơn giản là tắt một hoặc hai dòng. – DevinB
@devinb: Xem chỉnh sửa tôi đã thực hiện cho bài đăng của mình bên dưới. Bạn có thể cân nhắc việc mở một câu hỏi khác. –